`
cleaneyes
  • 浏览: 342489 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

读取Excel表格(数据为树形)

    博客分类:
  • Java
阅读更多

数据的代码按树形结构编码,每行数据有三列,code、name、description,每条数据可行占到多行,即name和description可能多行,但code只会占一行。

ResouceClassDao dao = new ResouceClassDaoImpl();

	public RowObj readSheetAndInsert(Sheet st, int typeId)
			throws BiffException, IOException {
		int rows = st.getRows();

		Stack<RowObj> parentObjs = new Stack<RowObj>();
		RowObj curParentObj = new RowObj();

		int count = 0;
		// 读取excel数据
		for (int i = 0; i < rows; i++) {
			Cell cell = st.getCell(0, i);
			String code = cell.getContents().trim();

			if (code != null && code.length() > 0) {
				cell = st.getCell(1, i);
				String name = cell.getContents().trim();

				cell = st.getCell(2, i);
				String description = cell.getContents().trim();

				RowObj obj = new RowObj();
				obj.setTypeId(typeId);
				obj.setCode(code);
				obj.setName(name);
				obj.setDescription(description);
				count++;

				String parentCode = curParentObj.getCode();
				System.out.print(parentCode + "|" + code);
				while (parentCode != null && code.indexOf(parentCode) < 0) {
					curParentObj = parentObjs.pop();
					parentCode = curParentObj.getCode();
				}
				System.out.println("      *" + parentCode + "|" + code);

				curParentObj.getSubObjs().add(obj);
				parentObjs.push(curParentObj);
				curParentObj = obj;
			} else {
				cell = st.getCell(1, i);
				String name = cell.getContents().trim();
				curParentObj.setName(curParentObj.getName() + name);

				cell = st.getCell(2, i);
				String description = cell.getContents().trim();
				curParentObj.setDescription(curParentObj.getDescription()
						+ description);
			}
		}

		System.out.println("count=" + count);

		return parentObjs.firstElement();
	}

	// excel导入
	public void importExcel(String fileName) throws BiffException, IOException {
		InputStream is = new FileInputStream(fileName);
		//
		Workbook wb = null;
		wb = Workbook.getWorkbook(is);

		Sheet[] sheets = wb.getSheets();
		TransactionManager transactionManager = new TransactionManager();
		try {
			transactionManager.begin();

			for (int k = 0; k < sheets.length; k++) {
				RowObj rootObj = readSheetAndInsert(sheets[k], k + 1);
				insertData(rootObj, 0);
			}

			transactionManager.commit();
		} catch (Exception e) {
			e.printStackTrace();
			try {
				transactionManager.rollback();
			} catch (RollbackException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			throw new RuntimeException(e);
		}
	}

	public void insertData(RowObj obj, int level) throws Exception {
		ResouceClassBean bean = new ResouceClassBean();

		String space = "";
		for (int i = 0; i < level; i++) {
			space = space + "  ";
		}
		if (obj.getCode() != null) {
			System.out.println(space + obj.getCode() + "|" + obj.getName()
					+ "|" + obj.getDescription());
			bean.setTct_id(obj.getTypeId());
			bean.setTctc_code(obj.getCode());
			bean.setTctc_name(obj.getName());
			bean.setTctc_brief_name(bean.getTctc_name());
			bean.setTctc_remark(obj.getDescription());
			bean.setTctc_parent_id(obj.getParentId());

			dao.insert(bean);
		}

		level++;
		List<RowObj> subObjs = obj.getSubObjs();
		if (subObjs != null && subObjs.size() > 0) {
			for (RowObj rowObj : subObjs) {
				rowObj.setParentId(bean.getTctc_id());
				insertData(rowObj, level);
			}
		}
	}

	private class RowObj {
		private String code;
		private String name;
		private String description;
		private String parentId;

		public String getParentId() {
			return parentId;
		}

		public void setParentId(String parentId) {
			this.parentId = parentId;
		}

		private int typeId;

		public int getTypeId() {
			return typeId;
		}

		public void setTypeId(int typeId) {
			this.typeId = typeId;
		}

		private List<RowObj> subObjs = new ArrayList<RowObj>();

		public List<RowObj> getSubObjs() {
			return subObjs;
		}

		public void setSubObjs(List<RowObj> subObjs) {
			this.subObjs = subObjs;
		}

		public String getCode() {
			return code;
		}

		public void setCode(String code) {
			this.code = code;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public String getDescription() {
			return description;
		}

		public void setDescription(String description) {
			this.description = description;
		}
	}

 

f

分享到:
评论

相关推荐

    Excel树形结构数据导入Oracle数据库(Java)

    该博客中提到的"ExecleToDBUtils.java"文件,很可能是用于读取Excel并将其数据转换为适合存储在Oracle数据库中的格式的工具类。这个类可能包含以下功能: 1. **读取Excel**:使用Apache POI库,可以读取Excel文件的...

    java把excel表的数据导入到mysql数据库

    用java把excel表的数据导入到数据库(可能有些类型还没考虑完全,抽空写的) 简单的思路 ... 二、读取excel文件的数据(注意:excel文件的数据表字段的顺序与该表的顺序一致,有空再做导出) 三、拼接sql

    java excel tree

    在Java Excel报表的上下文中,组合模式用于构建树形结构,代表组织中的部门或职位,每个节点可以是另一个子组织或者是个体员工。通过这种方式,我们可以方便地遍历和操作整个组织架构,无论是顶层的公司部门还是底层...

    Extjs 从grid中导出Excel表格。后台为C#(绝对好用)(按照自己的需求修改版本)

    标题中的“Extjs 从grid中导出Excel表格”指的是使用ExtJS框架,一个流行的JavaScript库,来将数据从Grid组件导出到Microsoft Excel格式的文件。在ExtJS中,Grid是一个用于展示数据的组件,它支持各种操作,如排序、...

    android 读取Excel文件转成xml文件

    最常用的是DOM,因为它允许以树形结构处理XML文档,便于操作。 5. **字符资源与XML文件**: - 在Android中,字符串资源通常存储在res/values/strings.xml文件中,这样可以方便地进行本地化和代码分离。将Excel数据...

    excel与xml与树控件的转换

    首先,需要读取Excel文件并将数据加载到内存中,然后构建树形结构。反之,从树控件导出数据到Excel,需要遍历树节点,创建新的工作表并写入数据。这通常需要编程技巧,如使用VBA或C#等。 4. **树控件与XML的交互**...

    vb.net 操作excel实例,包括简单的treeview,datagrid实例

    在实际项目中,我们可能会先读取Excel数据,将其转换为适当的数据结构(如DataTable或自定义类的集合),然后将这些数据绑定到TreeView和DataGridView。例如,TreeView可以显示工作簿和工作表的名称,而...

    JAVA实现Excel表数据导入ORACLE数据库.txt

    本文将详细介绍如何使用Java编程语言将Excel表格中的数据导入到Oracle数据库中。这一过程涉及到的关键技术包括:使用JDBC连接Oracle数据库、通过ODBC读取Excel文件以及利用PreparedStatement执行SQL语句。 #### ...

    跟据XML格式转换数据到excel

    解析器会识别XML文档的元素、属性和值,将其组织成树形结构,便于后续处理。 2. **映射XML结构到Excel格式**:XML的结构可能与Excel表格的行和列不完全匹配。因此,需要确定如何将XML元素映射到Excel的单元格。这...

    excel生成sql语句小工具

    《Excel生成SQL语句小工具详解》 在日常的数据处理工作中,我们经常需要将Excel表格中的数据导入到数据库中,而手动编写...无论是对普通用户还是开发者,它都是一款值得信赖的助手,为数据管理工作带来了极大的便利。

    xmind转excel

    2. **构建数据结构**:根据解析出的信息,创建一个合适的Java数据结构来存储这些信息,可能是树形结构或者二维数组,这取决于你如何映射XMind的主题和子主题。 3. **转换数据**:将XMind的数据结构转换为Excel的...

    解析Excel和XML

    1. **读取Excel**:使用适当的库读取Excel文件并获取数据。 2. **数据转换**:将Excel数据转换为结构化的XML元素和属性。 3. **生成XML**:使用XML库生成符合特定模式的XML文件。 此外,还可以用Excel作为数据输入...

    实现xml与树控件的互转,树控件与excel的互转

    反之,从Excel导入到树形控件时,需要读取Excel文件,解析工作表中的数据,然后根据这些数据构建树形结构。 3. **C#和ASP.NET的应用**: - **C#**:作为.NET框架的主要编程语言,C#提供了丰富的库和API来处理XML、...

    基于python实现把json数据转换成Excel表格

    这个场景中,我们需要将JSON数据转换成Excel表格,这是Python中一个实用且频繁的需求。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于网络API和数据存储。而Excel则是一个常用的电子表格...

    xml、excel文件读、取数据操作

    DOM解析器将整个XML文件加载到内存中,形成一个树形结构,适合小到中等大小的文件。SAX和StAX则采用事件驱动模型,只处理文件的一部分,适合大文件或资源有限的情况。 读取XML文件的基本步骤如下: 1. 引入Java的...

    解析excel写入xml

    在Python中,可以使用`xml.etree.ElementTree`库来创建和操作XML树形结构。我们可以先创建XML根元素,然后根据Excel数据动态添加子元素和属性,最后用`ElementTree`的`write()`方法将XML树写入文件。 实现这一过程...

    Excel文件转成XML

    1. **读取Excel文件**:可以使用Microsoft的COM接口(如Microsoft Office Interop库)或者第三方库如libxl、pandas(在C++中通过Python绑定)来读取Excel数据。这些库允许程序访问Excel文件中的工作表、单元格等信息...

    java_tree_excel.zip

    这个“java_tree_excel.zip”文件提供了一个这样的解决方案,特别关注如何将树形结构的数据有效地展示在Excel表格中。这个场景在数据分析、报表生成和数据可视化中非常常见,尤其是在需要将层次结构清晰展示的情况下...

    抽取多级目录到excel

    1. **多级目录**:在计算机系统中,目录结构通常采用树形结构,一级目录下可以包含多个子目录,子目录下还可以继续包含更深层的目录,这就是所谓的多级目录。多级目录使得文件和文件夹的组织更为有序,便于查找和...

    Excel2xml,excel文档解析

    当需要将Excel数据转换为XML时,DOM4J可以帮助我们构建XML文档的树形结构。下面是一个简单的例子,展示了如何使用DOM4J创建XML文档: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import...

Global site tag (gtag.js) - Google Analytics