`
weitao1026
  • 浏览: 1048916 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java导入Excel

阅读更多
用Excel作为数据源,通过Java Web进行导入,需要POI的jar。
apachepoi(org.apache.poi 3.8) 可以支持公式、日期等格式!
不说废话,上代码:



Java代码 复制代码 收藏代码
1./**
2. * Jun 25, 2012
3. */ 
4. 
5.import java.io.File; 
6.import java.io.FileInputStream; 
7.import java.io.IOException; 
8.import java.io.InputStream; 
9.import java.util.ArrayList; 
10.import java.util.List; 
11. 
12.import org.apache.commons.io.FilenameUtils; 
13.import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
14.import org.apache.poi.ss.usermodel.Cell; 
15.import org.apache.poi.ss.usermodel.CellValue; 
16.import org.apache.poi.ss.usermodel.FormulaEvaluator; 
17.import org.apache.poi.ss.usermodel.Row; 
18.import org.apache.poi.ss.usermodel.Sheet; 
19.import org.apache.poi.ss.usermodel.Workbook; 
20.import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
21. 
22./**
23. * Excel组件
24. * 
25. * @author Snowolf
26. * @version 1.0
27. * @since 1.0
28. */ 
29.public abstract class ExcelHelper { 
30. 
31.    /**
32.     * Excel 2003
33.     */ 
34.    private final static String XLS = "xls"; 
35.    /**
36.     * Excel 2007
37.     */ 
38.    private final static String XLSX = "xlsx"; 
39.    /**
40.     * 分隔符
41.     */ 
42.    private final static String SEPARATOR = "|"; 
43. 
44.    /**
45.     * 由Excel文件的Sheet导出至List
46.     * 
47.     * @param file
48.     * @param sheetNum
49.     * @return
50.     */ 
51.    public static List<String> exportListFromExcel(File file, int sheetNum) 
52.            throws IOException { 
53.        return exportListFromExcel(new FileInputStream(file), 
54.                FilenameUtils.getExtension(file.getName()), sheetNum); 
55.    } 
56. 
57.    /**
58.     * 由Excel流的Sheet导出至List
59.     * 
60.     * @param is
61.     * @param extensionName
62.     * @param sheetNum
63.     * @return
64.     * @throws IOException
65.     */ 
66.    public static List<String> exportListFromExcel(InputStream is, 
67.            String extensionName, int sheetNum) throws IOException { 
68. 
69.        Workbook workbook = null; 
70. 
71.        if (extensionName.toLowerCase().equals(XLS)) { 
72.            workbook = new HSSFWorkbook(is); 
73.        } else if (extensionName.toLowerCase().equals(XLSX)) { 
74.            workbook = new XSSFWorkbook(is); 
75.        } 
76. 
77.        return exportListFromExcel(workbook, sheetNum); 
78.    } 
79. 
80.    /**
81.     * 由指定的Sheet导出至List
82.     * 
83.     * @param workbook
84.     * @param sheetNum
85.     * @return
86.     * @throws IOException
87.     */ 
88.    private static List<String> exportListFromExcel(Workbook workbook, 
89.            int sheetNum) { 
90. 
91.        Sheet sheet = workbook.getSheetAt(sheetNum); 
92. 
93.        // 解析公式结果 
94.        FormulaEvaluator evaluator = workbook.getCreationHelper() 
95.                .createFormulaEvaluator(); 
96. 
97.        List<String> list = new ArrayList<String>(); 
98. 
99.        int minRowIx = sheet.getFirstRowNum(); 
100.        int maxRowIx = sheet.getLastRowNum(); 
101.        for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) { 
102.            Row row = sheet.getRow(rowIx); 
103.            StringBuilder sb = new StringBuilder(); 
104. 
105.            short minColIx = row.getFirstCellNum(); 
106.            short maxColIx = row.getLastCellNum(); 
107.            for (short colIx = minColIx; colIx <= maxColIx; colIx++) { 
108.                Cell cell = row.getCell(new Integer(colIx)); 
109.                CellValue cellValue = evaluator.evaluate(cell); 
110.                if (cellValue == null) { 
111.                    continue; 
112.                } 
113.                // 经过公式解析,最后只存在Boolean、Numeric和String三种数据类型,此外就是Error了 
114.                // 其余数据类型,根据官方文档,完全可以忽略http://poi.apache.org/spreadsheet/eval.html 
115.                switch (cellValue.getCellType()) { 
116.                case Cell.CELL_TYPE_BOOLEAN: 
117.                    sb.append(SEPARATOR + cellValue.getBooleanValue()); 
118.                    break; 
119.                case Cell.CELL_TYPE_NUMERIC: 
120.                    // 这里的日期类型会被转换为数字类型,需要判别后区分处理 
121.                    if (DateUtil.isCellDateFormatted(cell)) { 
122.                        sb.append(SEPARATOR + cell.getDateCellValue()); 
123.                    } else { 
124.                        sb.append(SEPARATOR + cellValue.getNumberValue()); 
125.                    } 
126.                    break; 
127.                case Cell.CELL_TYPE_STRING: 
128.                    sb.append(SEPARATOR + cellValue.getStringValue()); 
129.                    break; 
130.                case Cell.CELL_TYPE_FORMULA: 
131.                    break; 
132.                case Cell.CELL_TYPE_BLANK: 
133.                    break; 
134.                case Cell.CELL_TYPE_ERROR: 
135.                    break; 
136.                default: 
137.                    break; 
138.                } 
139.            } 
140.            list.add(sb.toString()); 
141.        } 
142.        return list; 
143.    } 
144.} 



由于Excel中的数据有日期、公式等等格式,参考http://poi.apache.org/spreadsheet/eval.html做了修改,完全兼容。

当前的Excel,C列是根据A、B相乘计算而来,D列是日期格式:



测试下:



Java代码 复制代码 收藏代码
1./**
2. * Jun 25, 2012
3. */ 
4. 
5.import java.io.File; 
6.import java.io.IOException; 
7.import java.util.List; 
8. 
9.import static org.junit.Assert.*; 
10.import org.junit.Test; 
11. 
12./**
13. * 
14. * @author Snowolf
15. * @version 1.0
16. * @since 1.0
17. */ 
18.public class ExcelHelperTest { 
19. 
20.    @Test 
21.    public void test() { 
22.        String path = "excel.xlsx"; 
23.        List<String> list = null; 
24.        try { 
25.            list = ExcelHelper.exportListFromExcel(new File(path), 0); 
26.            assertNotNull(list); 
27.        } catch (IOException e) { 
28.            fail(); 
29.        } 
30. 
31.    } 
32.} 


就是这样了




分享到:
评论

相关推荐

    java 导入Excel 文件,支持xls、xlsx、csv格式

    综上所述,Java导入Excel文件涉及的关键技术包括Apache POI库的使用,对HSSF和XSSF的理解,以及对CSV文件处理的技巧。通过熟练掌握这些知识,你可以编写出高效且健壮的文件导入程序,满足各种需求。

    java导入excel到数据库

    以上就是关于“Java导入Excel到数据库”的详细知识点,涵盖了文件路径配置、合并单元格处理、数据库连接、Excel操作和数据导入等多个方面。这个过程需要对Java、数据库操作以及Excel处理有深入理解,才能有效地完成...

    java导入excel(直接可执行)

    测试环境:java 1.8 + poi 3.17+tomcat jar列表: commons-codec-1.10.jar commons-collections4-4.1.jar commons-fileupload-1.3.1.jar lib/commons-io-2.5.jar commons-lang-2.3.jar poi-3.17.jar poi-ooxml-3.17....

    java导入Excel的数据的同时导入Excel里面的图片-测试demo.zip

    在Java编程中,处理Excel文件是一项常见的任务,特别是在数据导入和导出的场景下。...这个"java导入Excel的同时导入图片-测试demo"应该包含了一个完整的示例,演示了上述步骤,你可以根据这个示例代码进行学习和实践。

    java导入excel

    综上所述,完成“Java导入Excel到SQL Server 2008”的任务涉及到多个Java和数据库技术的结合使用,包括文件I/O、数据处理、数据库连接、事务控制以及用户交互等。在实际开发中,还需要考虑错误处理、日志记录、代码...

    Java导入excel文件的jar包

    在本例中,我们需要关注的焦点是“Java导入excel文件的jar包”,这涉及到Java与Excel交互的核心库——Apache POI。 Apache POI是一个流行的开源项目,它允许Java开发者创建、修改和显示Microsoft Office格式的文件...

    java导入Excel需要的jar包

    "java导入Excel需要的jar包"这个话题,就是关于在Java项目中使用特定的jar包来处理Excel文件。下面将详细介绍相关的知识点。 1. **Apache POI**: Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的...

    Java 使用poi导入excel 并使用xml做数据验证

    在Java开发中,处理Excel数据是一项常见的任务,尤其是在数据导入导出、数据分析或者报表生成等场景。Apache POI是一个流行的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(....

    java导入excel工具jar包

    java导入excel工具包2.0。修改了许多BUG,增加了许多功能

    java导入EXCEL

    ### 一、Java导入Excel的基本概念 在IT行业中,数据处理是一项常见的任务。特别是在企业级应用中,经常需要将Excel数据导入到数据库或其他系统中进行进一步处理。Java作为一种广泛使用的编程语言,在处理这种需求时...

    java导入excel表格

    在Java编程中,导入Excel表格是一项常见的任务,特别是在数据处理、数据分析或系统集成等领域。Excel文件通常用于存储结构化数据,而Java作为一种强大的后端语言,提供了多种方式来读取和操作这些数据。本篇文章将...

    java导入excel表

    在文档`java导入excel.docx`中,可能会包含更详细的代码示例和步骤说明,你可以参考这个文档来完善你的程序。总的来说,利用Java和正确的库,你可以轻松地将Excel数据导入到各种数据库系统中,实现高效的数据处理。

    利用java 导入Excel表格数据到mysql数据库里,源码,直接导入eclipse就可以运行

    在Java开发中,将Excel表格数据导入MySQL数据库是一项常见的任务,尤其在数据处理、数据分析以及系统集成等场景中。这个项目提供了一套完整的源码,可以直接在Eclipse环境中运行,帮助开发者快速实现这一功能。下面...

    Java实现Excel导入导出

    Excel源代码,导入导出各种工具类 &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi-scratchpad 代码实例: String path = ""; byte[] bytes; vo.setCurrentPage(0); vo....

    Java导入excel文件

    在Java编程环境中,导入Excel文件是一项常见的任务,特别是在数据处理、数据分析或自动化测试等领域。本项目提供了一个完整的解决方案,帮助开发者实现这一功能。下面将详细解释这个Java项目中涉及的关键知识点,...

    java 导入及判断的Excel 使用方法

    本文将深入探讨Java中导入和判断Excel的使用方法,结合实例分析,帮助你全面理解这一技术。 首先,Java与Excel的交互通常依赖于第三方库,如Apache POI或JExcelAPI。Apache POI是目前最常用的一个,它提供了丰富的...

    java Excel工具类,导入导出Excel数据

    java Excel工具类,导入导出Excel数据,导入数据对合并表格有判断获取数据,导出数据到Excel,Excel文件不存在会创建。 博客:https://blog.csdn.net/qq_37902949/article/details/81230640

    解决Java导入excel大量数据出现内存溢出的问题

    解决Java导入excel大量数据出现内存溢出的问题 在Java中导入大量Excel数据时,可能会出现内存溢出的问题,这是因为Excel文件中的大量数据会被加载到内存中,从而导致内存溢出。今天,我们将介绍如何解决这个问题。 ...

    最新java实现Excel导入导出

    用Java实现的Excel的导入导出,简洁明了,高质量代码。

Global site tag (gtag.js) - Google Analytics