`

POI解析Excel 文件读取,修改,另存等功能

 
阅读更多

package com;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.swing.JOptionPane;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * @author 李高松
 * @function 使用poi读取Excel文件完成对资产表的读取生成设备跟踪表和人员跟踪表
 * @date 2012年6月27日 15:36:18
 * @version 1.0
 */
public class ReadExcel {

	public static void main(String[] args) {

		Properties prop = new Properties();
		InputStream in = ReadExcel.class
				.getResourceAsStream("/path.properties");
		String url = "";
		try {
			prop.load(in);
			url = prop.getProperty("path").trim();
			JOptionPane.showMessageDialog(null, "点击确定执行!");
			WriteExcelSBGZ(url);// 生成设备文件
			WriteExcelRYGZ(url);// 生成人员文件
			JOptionPane.showMessageDialog(null, "请稍候!处理中......");
			JOptionPane.showMessageDialog(null, "处理完成!");

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static List<Property> ReadExcel(String url) {
		File f = new File(url + "资产总表.xls");// 读取excel文件
		try {
			FileInputStream is = new FileInputStream(f);// 创建文件流
			HSSFWorkbook wbs = new HSSFWorkbook(is);// 加载文件流
			HSSFSheet childSheet = wbs.getSheetAt(0);// 读取第一个Sheet
//			System.out.println("总行数:" + childSheet.getLastRowNum());
			List<Property> lt = new ArrayList<Property>();
			for (int i = 1; i < childSheet.getLastRowNum() + 1; i++) {// 遍历行
				HSSFRow row = childSheet.getRow(i);// 获得行对象
				if (null != row) {
					HSSFCell cell = row.getCell(0);
//					System.out.println("总列数:" + row.getLastCellNum());
					Property ppt = new Property();
					ppt.setSid(row.getCell(0).toString());
					ppt.setWlgs(row.getCell(1).toString());
					ppt.setSbtype(row.getCell(2).toString());
					ppt.setPp(row.getCell(3).toString());
					ppt.setGgxh(row.getCell(4).toString());
					ppt.setSbid(row.getCell(5).toString());
					ppt.setCcid(row.getCell(9).toString());
					ppt.setChushi(row.getCell(12).toString());
					ppt.setName(row.getCell(14).toString());
					lt.add(ppt);

				}

			}
			is.close();
			return lt;

		} catch (FileNotFoundException e) {
			JOptionPane.showMessageDialog( null,"路径错误!请检查路径");
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;

	}

	public static void WriteExcelSBGZ(String url) {

		try {
			List<Property> lt = ReadExcel( url);
			for (int i = 0; i < lt.size(); i++) {
				File f = new File(url+"设备跟踪表.xls");// 读取excel文件
				FileInputStream is = new FileInputStream(f);// 创建文件流
				HSSFWorkbook wb = new HSSFWorkbook(is);
				HSSFSheet sheet = wb.getSheetAt(0); // 第一个工作表
				HSSFRow row = sheet.getRow(3);// 获得行对象
				row.getCell(2).setCellValue(lt.get(i).getSbid());
				row.getCell(6).setCellValue(lt.get(i).getSid());
				row.getCell(10).setCellValue(lt.get(i).getSbtype());
				HSSFRow row1 = sheet.getRow(4);// 获得行对象
				row1.getCell(2).setCellValue(lt.get(i).getPp());
				row1.getCell(6).setCellValue(lt.get(i).getGgxh());
				row1.getCell(10).setCellValue(lt.get(i).getCcid());
				FileOutputStream fileOut = new FileOutputStream(
						url+"设备跟踪表-" + lt.get(i).getSbid() + ".xls");
				wb.write(fileOut);
				is.close();
				fileOut.close();
			}

		} catch (FileNotFoundException e) {
			JOptionPane.showMessageDialog( null,"路径错误!请检查路径");
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unused")
	public static void WriteExcelRYGZ(String url) {
		HSSFWorkbook wb = null;
		File f;
		FileInputStream is = null;
		FileOutputStream fileOut = null;

		try {
			List<Property> lt = ReadExcel(url);

			for (int i = 0; i < lt.size(); i++) {

				if (i == 0) {
					f = new File(url + "人员跟踪表.xls");// 读取excel文件
					is = new FileInputStream(f);// 创建文件流

				} else {
					try {
						f = new File(url + "人员跟踪表-" + lt.get(i).getChushi()
								+ "-" + lt.get(i).getName() + ".xls");// 读取excel文件
						is = new FileInputStream(f);// 创建文件流

					} catch (Exception e) {
						f = new File(url + "人员跟踪表.xls");// 读取excel文件
						is = new FileInputStream(f);// 创建文件流
					}

				}
				if (null != is) {

					wb = new HSSFWorkbook(is);
					HSSFSheet sheet = wb.getSheetAt(0); // 第一个工作表
					HSSFRow row1 = sheet.getRow(1);
					if (!lt.get(i).getName().equals(row1.getCell(7).toString())) {
						row1.getCell(1).setCellValue(lt.get(i).getChushi());
						row1.getCell(7).setCellValue(lt.get(i).getName());
						HSSFRow row = sheet.getRow(3);// 获得行对象
						row.getCell(1).setCellValue(lt.get(i).getSbtype());
						row.getCell(2).setCellValue(lt.get(i).getWlgs());
						row.getCell(3).setCellValue(lt.get(i).getSbid());
						row.getCell(4).setCellValue(lt.get(i).getCcid());
						fileOut = new FileOutputStream(url + "人员跟踪表-"
								+ lt.get(i).getChushi() + "-"
								+ lt.get(i).getName() + ".xls");
						wb.write(fileOut);
						is.close();
						fileOut.close();
					} else {
						int n = 5;
						if (!(sheet.getRow(n).getCell(1).toString() == "")) {
							n = n + 2;
						}
						HSSFRow row = sheet.getRow(n);// 获得行对象
						row.getCell(1).setCellValue(lt.get(i).getSbtype());
						row.getCell(2).setCellValue(lt.get(i).getWlgs());
						row.getCell(3).setCellValue(lt.get(i).getSbid());
						row.getCell(4).setCellValue(lt.get(i).getCcid());
						fileOut = new FileOutputStream(url + "人员跟踪表-"
								+ lt.get(i).getChushi() + "-"
								+ lt.get(i).getName() + ".xls");//另存文件
						wb.write(fileOut);
						is.close();
						fileOut.close();
					}
				}

			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
 
分享到:
评论
1 楼 贝塔ZQ 2016-09-02  
PageOffice插件,挺好使得,可以试试

相关推荐

    apache poi解析Excel时报错,我将Excel打开后保存,就不会报错,用jar完美解决

    apache poi解析Excel时报错,我将Excel打开后保存,就不会报错,我将重写的类从新打包这样问题虽然网上有解决方案,但是需要自己打包重写对应类,我已将这些步骤做好了。

    解析excel另存为部分数据

    总结起来,解析Excel并另存为部分数据涉及到的关键技术点有:Apache POI库的使用,读取与写入Excel文件,以及数据的选择性处理。这些技术在数据分析、报表生成、数据导入导出等场景中有着广泛的应用。

    将CSV、EXCEL、TXT等文件的数据导入到oracle中

    这需要第三方库如Apache POI来解析Excel文件。 三、TXT文件导入 TXT文件导入与CSV类似,只是可能需要额外设置字段分隔符。使用SQL*Loader时,确保在控制文件中正确定义了字段分隔符。 四、注意事项 - 在导入前,...

    word、ppt、excel转pdf的Demo

    PowerPoint转PDF:类似地,对于PowerPoint演示文稿,转换过程可能涉及读取PPT或PPTX文件,解析其内容,包括文本、图片、幻灯片布局等,然后使用PDF库如PDFBox或iText生成PDF文件。这些库可以帮助保留动画和交互性,...

    asp文件上传并存入数据库

    Excel文件的处理类似,可以通过Microsoft的COM组件或OpenXML SDK来读取和解析。在这个案例中,Word文档被另存为HTML,这可能是为了方便在网页上展示或者简化处理步骤。 存入数据库的过程涉及数据库设计、SQL语句...

    后台word、excel、ppt、txt转化为html

    - 开发者也可以使用Apache POI(Java)或Python的`openpyxl`库来读取Excel文件,并生成HTML代码。 - 转换时需要注意单元格样式、公式、图表的处理,确保HTML表格的准确性和可读性。 3. **PowerPoint到HTML**: -...

    java实现word的下载和生成html页面代码

    在Java中,你可以使用POI来创建、修改和读取Word(.doc)文件。POI提供了一套API,允许开发者用纯Java来处理这些文件,无需依赖任何Microsoft的组件。 POI的主要组件包括HSSF(处理Excel文件)和HWPF(处理Word文件...

    JAVA动态生成word和pdf.doc

    2. Apache POI方案:Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 CompoundDocument Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。他的Excel处理很强大,对于Word还局限于...

    java带格式导出WORD文档

    POI虽然能够读取Word文档,但在编写文档时,其对复杂样式的控制力有限,且对于大规模数据的处理效率低下。同样,尽管iText在处理Excel文档时表现良好,但对于复杂的Word文档而言,其处理起来依旧困难重重。 ### 2. ...

    完美解决方案:Java生成复杂Word文档

    Apache POI是一个流行的库,用于读取和写入Microsoft Office格式的文件,包括Word文档。然而,尽管它在读取文档方面表现出色,但在创建新文档或修改现有文档时,特别是处理复杂的样式和布局时,可能会变得非常困难。...

    freemarker生成复杂word

    POI读取Word文档比较适合、对于生成文档样式比较难控制,iText操作Excel还可以,对Word的操作功能有限,JACOB操作Word实现复杂,并且无法将服务部署到Linux平台,要求安装office,对于实现固定格式的报表实现困难,...

Global site tag (gtag.js) - Google Analytics