java使用POI进行Excel读写
1 jar包下载
参考链接:http://www.cnblogs.com/gmq/archive/0001/01/01/1521496.html
poi-3.7-20101029.jar和源码下载地址:http://pan.baidu.com/s/1sjNmnc5#path=%252F04technology%252F01J2EE%252Fjar
2 ExcelHelper类
package zjr.amy.excel; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * Excel帮助类 * * @author zhujinrong * */ public class ExcelHelper { /** * 读取Excel内容 * * @param fileName * 文件名和路径 * @param ignoreRows * 忽略读取的行数 * @return 数据 * @throws FileNotFoundException * 找不到文件 * @throws IOException * 输入输出异常 */ public static String[][] getData(String fileName, int ignoreRows) throws FileNotFoundException, IOException { File file = new File(fileName); List<String[]> result = new ArrayList<String[]>(); int rowSize = 0; BufferedInputStream in = new BufferedInputStream(new FileInputStream( file)); POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook workbook = new HSSFWorkbook(fs); HSSFCell cell = null; for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) { // 可能有多个sheet HSSFSheet sheet = workbook.getSheetAt(sheetIndex); for (int rowIndex = ignoreRows; rowIndex < sheet.getLastRowNum(); rowIndex++) { HSSFRow row = sheet.getRow(rowIndex); if (row == null) { continue; } // 获取行数 int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (int collumnIndex = 0; collumnIndex <= row.getLastCellNum(); collumnIndex++) { String value = ""; cell = row.getCell(collumnIndex); if (cell != null) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (date != null) { value = new SimpleDateFormat("yyyy-MM-dd") .format(date); } else { value = ""; } } else { double d = cell.getNumericCellValue(); value = d + ""; } break; case HSSFCell.CELL_TYPE_FORMULA: if (!cell.getStringCellValue().equals("")) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } if (collumnIndex == 0 && value.trim().equals("")) { break; } values[collumnIndex] = value.trim(); hasValue = true; } } if (hasValue) { result.add(values); } } } in.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 写Excel数据 * * @param fileName * 文件名 * @param data * 数据 * @param sheetName * sheet名字 * @throws IOException * 输入输出异常 */ public static void setData(String fileName, String[][] data, String sheetName) throws IOException { FileOutputStream fos = new FileOutputStream(fileName); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet s = wb.createSheet(); wb.setSheetName(0, sheetName); if (data != null && data.length > 0) { for (int i = 0; i < data.length; i++) { // 创建第i行 HSSFRow row = s.createRow(i); for (int j = 0; j < data[i].length; j++) { // 第i行第j列的数据 HSSFCell cell = row.createCell(j); cell.setCellValue(data[i][j]); } } } // 写入工作薄 wb.write(fos); // 关闭输出流 fos.close(); } }
3 TestExcelHelper类
package zjr.amy.excel.test; import java.io.FileNotFoundException; import java.io.IOException; import zjr.amy.excel.ExcelHelper; public class TestExcelHelper { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub TestGetData(); } /** * 测试获取数据 */ public static void TestGetData() { try { String[][] array = ExcelHelper.getData("D:/001code/100java学习/JavaUtil/doc/税费管理20141105100144.xls", 0); if (array != null && array.length > 0){ for(int i = 0; i < array.length; i++){ System.out.print(i + ": "); for(int j = 0; j < array[i].length; j ++){ System.out.print(array[i][j] + " "); } System.out.println(); } setData(array, "税费信息"); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 测试写入数据 * @param data 数据 * @param sheetName sheet名称 */ public static void setData(String [][] data, String sheetName){ String fileName="D:/001code/100java学习/JavaUtil/doc/税费管理20141105100144Copy.xls"; try { ExcelHelper.setData(fileName, data, sheetName); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
4 测试结果
1-1 待读取文件内容(D:\001code\100java学习\JavaUtil\doc\税费管理20141105100144.xls)
图1-2 显示读取税费管理20141105100144.xls文件内容
1-3 写入文件内容(D:\001code\100java学习\JavaUtil\doc\税费管理20141105100144Copy.xls)
5 git地址
https://github.com/HelloAmy/JavaStudy.git
作者:BestNow
出处:http://www.cnblogs.com/BestNow/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/BestNow/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?