package com.primeton.yc.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import jxl.Workbook;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.w3c.dom.*;
import com.primeton.tp.common.xml.XmlUtil;
import com.primeton.tp.core.api.BizContext;
/**
* @author admin
* @version 1.0
* @date 2009-6-22
* @class_displayName ParsExcel
*/
public class ParsExcel {
public static void main(String[] args) throws Exception {
System.out.println("========start=========");
parshExcel();
System.out.println("========end=========");
}
/**
*
* @param doc type: Document, DOM;
* @param param type: BizContext;
* @return: int ,运算逻辑返回值,如果失败返回0,成功返回1
* @throws Exception
* <p>
* ** bizlet 的显示名称 **
* @bizlet_displayName parshExcel
*/
//public static int parshExcel(Document doc, BizContext param) throws Exception{
public static int parshExcel() throws Exception{
String filePath = "f:/aa.xls";//(String) param.getParaObjectAt(0);
System.out.println("========="+filePath);
String tableName = "CUST";//(String)param.getParaObjectAt(1);
//Node param1 = (Node) param.getParaObjectAt(2);
List sqls = new ArrayList();
HSSFWorkbook workbook = null;
try {
workbook = new HSSFWorkbook(new FileInputStream(filePath));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
int len = workbook.getNumberOfSheets();
for (int i = 0; i < len; i++) {
// 获得Excel的Sheet
HSSFSheet sheet = workbook.getSheetAt(i);
int sNum = 0;
int rows = sheet.getPhysicalNumberOfRows();
StringBuffer sql = new StringBuffer("").append("insert into "+tableName+"(");
//取第一行的每列作为字段名,必须和数据库字段名相对应
HSSFRow titleRow = sheet.getRow(0);
if(titleRow!=null){
int titleCells = titleRow.getPhysicalNumberOfCells();
HSSFCell titleCell = null;
for(int c=0;c<titleCells;c++){
titleCell = titleRow.getCell((short)c);
String titleCellValue=titleCell.getStringCellValue();
System.out.println("titleCellValue="+titleCellValue);
sql = sql.append(titleCellValue+",");
}
String sql1 = sql.substring(0, sql.length()-1);
sql = new StringBuffer(sql1).append(") values(");
}
String sqlbak = sql.toString();
// 按行读取excel中的数据
for (int r = 1; r < rows; r++){
// 获得Sheet中的一行
HSSFRow row = sheet.getRow(r);
HSSFCell cell = null;
if (row != null) {
int cells = row.getPhysicalNumberOfCells();
for(int c=0;c<cells;c++){
System.out.println("cells.length="+cells);
cell = row.getCell((short)c);
if(cell!=null) {
int cellType=cell.getCellType();
if(cellType==HSSFCell.CELL_TYPE_STRING){
sql = sql.append(cell.getStringCellValue()+",");
}else if(cellType==HSSFCell.CELL_TYPE_NUMERIC){
java.text.DecimalFormat formatter = new java.text.DecimalFormat("########");
String str = formatter.format(cell.getNumericCellValue());
sql = sql.append(str+",");
}
}else{
sql = sql.append("null,");
}
}
String esql = sql.substring(0, sql.length()-1)+");";
sqls.add(esql);
sql = new StringBuffer(sqlbak);
}
}
}
StringBuffer sqlList = new StringBuffer();
//sqlList.append("<list>");
for(int i=0;i<sqls.size();i++){
sqlList.append("<myEntity><sql>").append(sqls.get(i)).append("</sql></myEntity>");
}
//sqlList.append("</list>");
//XmlUtil.setNodeValue( param1, sqlList.toString() );
System.out.println(sqlList);
return 1;
}
}
/*
<list>
<myEntity name="sql1">
<sql>sqls[0]</sql>
</myEntity>
<myEntity name="sql2">
<sql>sqls[1]</sql>
</myEntity>
<list>
*/
分享到:
相关推荐
以上就是使用Java Poi解析Excel数据的基本流程。在实际应用中,你可能还需要处理其他复杂场景,比如样式、公式、超链接等。Poi库提供了丰富的API来处理这些问题,使得与Excel文件的交互变得简单且灵活。在提供的"poi...
本示例将深入讲解如何使用Apache POI来解析Excel文件。 Apache POI是Apache软件基金会的一个开源项目,它的主要功能是处理微软的Office Open XML (OOXML) 和早期的二进制文件格式,例如Excel的.BIFF8格式。在Java中...
4. 解析单元格值:`getCellValue()`方法根据单元格类型返回相应的值,可能包括字符串、数字、日期等。需要注意的是,对于数值型单元格,可能需要转换类型: ```java private String getCellValue(Cell cell) { ...
这个"最新版poi解析excel2007源码"应该包含的是使用Apache POI库读取和操作XLSX文件的Java代码示例。 首先,`PoiReadExcel2007.java`是主要的源代码文件,它可能包含了以下关键知识点: 1. **创建Workbook对象**:...
以下是一些Java POI解析Excel时数据转换的公用方法。 1. **字符串转Double** `reThreeStr(String ss)` 方法用于将输入的字符串`ss`转换为保留三位小数的Double类型。首先,它通过正则表达式验证输入字符串是否为...
解析Excel文件通常涉及读取单元格的值,转换数据类型,并可能进行一些处理。例如,日期、数字和字符串的处理: ```java CellType cellType = cell.getCellType(); switch (cellType) { case STRING: String value ...
在本场景中,我们将主要关注如何使用Apache POI解析Excel文件。 Excel文件主要由两种类型:`.xls`(旧版的BIFF格式)和`.xlsx`(基于Open XML标准的OOXML格式)。Apache POI提供了HSSF(Horrible Spreadsheet ...
注意,单元格类型可能为数字、字符串、日期等,需要正确处理。 ```java for (Cell cell : row) { String cellValue = null; switch (cell.getCellType()) { case STRING: cellValue = cell.getStringCellValue...
`XSSFCell` 类提供了多种方法来获取单元格的值,如 `getStringCellValue()`(字符串)、`getNumericCellValue()`(数字)等。注意,根据单元格的实际内容,你需要选择正确的方法: ```java String cellValue = ...
- **单元格**:单元格可以存储各种类型的数据,包括字符串、数字、日期等。使用Row.createCell()创建新单元格,getCell()获取已有单元格。 4. **数据写入**: - 单元格数据可以通过setCellValue()方法设置。例如...
Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 格式的文件,包括 Excel、Word 和 PowerPoint。其中,处理 Excel 文件的功能主要由 HSSF(对应 `.xls` 文件)和 XSSF(对应 `.xlsx` 文件)两个子项目...
对于字符串,使用`cell.getStringCellValue()`。 在解析数据后,我们可以使用MyBatis框架将其插入到MySQL数据库中。MyBatis是一个轻量级的持久层框架,它允许我们将SQL语句直接写在XML配置文件或注解中,简化了...
以下是一个使用Apache POI解析Excel的基本步骤: 1. **引入依赖**:首先,你需要将Apache POI的JAR文件加入到你的项目构建路径中。如果你使用Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org....
Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将深入探讨如何使用Apache POI创建一个Java工具类来实现高效且灵活的Excel导出功能。 首先,我们需要...
本节我们将深入探讨如何在Java中解析Excel文件,重点是利用Apache POI库进行操作。Apache POI是一个开源项目,它提供了读取和写入Microsoft Office格式文件的能力,包括Excel。 首先,要使用Apache POI处理Excel...
`:获取字符串类型的单元格值。 - `cell.getNumericCellValue();`:获取数字类型的单元格值。 - `cell.getCellType();`:获取单元格类型。 4. **异常处理**: 通过`try-catch`块捕获并处理可能出现的文件读取...
在"poi包亲测可用"的场景中,我们主要关注的是它在解析Excel文件并将其数据导入数据库方面的应用。 首先,Apache POI提供了一系列的类来操作Excel文件。`XSSFWorkbook` 和 `HSSFWorkbook` 分别用于处理.xlsx(XML...
1. 单元格数据类型:单元格可能包含不同类型的数据,如数字、字符串、日期等。使用 `getCellType()` 方法获取,然后用适当的转换方法读取值。 ```java CellType cellType = cell.getCellType(); switch (cellType) {...
例如,日期字符串可能需要转换为`LocalDate`对象,数字字符串可能需要转换为`Double`。 10. **多线程处理** - 对于大量数据,可以考虑使用多线程并行处理Excel文件,提升效率。每个线程处理一部分行,但需要注意...
接下来,我们遍历每一行(Row)和每一个单元格(Cell),根据单元格的类型(如字符串、数字、布尔等)提取数据,并打印出来。 如果你的Excel文件包含日期或其他特殊类型的单元格,可能需要额外的处理。例如,对于...