/**
* excel文件导入、导出、下载工具类
*/
public class ExcelTools extends ExcelUtils {
private static final String CONTENT_TYPE = "application/vnd.ms-excel";
private static final String HEADER_DIS = "Content-Disposition";
private static final String HEADER_ATT = "attachment;filename=";
private static final String FILE_EX = ".xls";
POIFSFileSystem fs = null;
HSSFWorkbook wb = null;
private int readWhichSheet; // 读取哪一个sheet
private int startReadRowNum;// 从第几行开始读取
private int endReadRowNum; // 读到第几行结束
/**
* excel文件生成并下载
*
* @param servletActionContext 上下文
* @param config 模板文件
* @param fname 导出时的文件名
* @throws ExcelException
* @throws IOException
*/
@SuppressWarnings("static-access")
public static void export2Web(HttpServletResponse response, String config,
String fname) throws ExcelException, IOException {
response.reset();
response.setContentType(CONTENT_TYPE);
response.setHeader(HEADER_DIS, HEADER_ATT + fname + FILE_EX);
export(config, response.getOutputStream());
}
/**
* 将excel生成至本地
*
* @param config 模板文件
* @param dir 输出的文件目录
* @param fname 输出的文件名
* @throws ExcelException
* @throws IOException
*/
@SuppressWarnings("static-access")
public static void export2Local(String config, String dir, String fname)
throws ExcelException, IOException {
export(config, new FileOutputStream(dir + "/" + fname));
}
/**加载EXCEL文件
* @param excelfile excel文件
* @param readWhichSheet 需要解析哪个sheet表,座标1开始
* @param startReadRowNum 需要从哪一行开始解析,座标1开始
* @param endReadRowNum 结束到哪一行,输入0则解析到末尾
* @throws FileNotFoundException
* @throws IOException
*/
public void loadExcelFile(File excelfile, int readWhichSheet,
int startReadRowNum, int endReadRowNum)
throws FileNotFoundException, IOException {
fs = new POIFSFileSystem(new FileInputStream(excelfile));
wb = new HSSFWorkbook(fs);
this.readWhichSheet = readWhichSheet - 1;
this.startReadRowNum = startReadRowNum - 1;
this.endReadRowNum = endReadRowNum - 1;
}
/**加载EXCEL文件
* @param inputStream excel文件流
* @param readWhichSheet 需要解析哪个sheet表,座标1开始
* @param startReadRowNum 需要从哪一行开始解析,座标1开始
* @param endReadRowNum 结束到哪一行,输入0则解析到末尾
* @throws FileNotFoundException
* @throws IOException
*/
public void loadExcelFile(InputStream inputStream, int readWhichSheet,
int startReadRowNum, int endReadRowNum)
throws FileNotFoundException, IOException {
fs = new POIFSFileSystem(inputStream);
wb = new HSSFWorkbook(fs);
this.readWhichSheet = readWhichSheet;
this.startReadRowNum = startReadRowNum;
this.endReadRowNum = endReadRowNum;
}
/**
* 读取excel的值,以List<String[]>返回
* @return
*/
public List<String[]> readExcelData() {
int allsheet = wb.getNumberOfSheets();
if (readWhichSheet >= allsheet) {
return new ArrayList<String[]>(0);
}
HSSFSheet sheet = wb.getSheetAt(readWhichSheet);
if (sheet == null) {
return new ArrayList<String[]>(0);
}
int rowNum = sheet.getLastRowNum() + 1; // 这里比较特殊,cell个数计算正确,row个数需要加1才对
System.out.println("rownum:" + rowNum);
if (endReadRowNum == -1)
endReadRowNum = rowNum - 1;// 如果结束行等0,那么就取到末尾
List<String[]> resultList = new ArrayList<String[]>(rowNum);
for (int i = startReadRowNum; i <= endReadRowNum && i < rowNum; i++) {
HSSFRow row = sheet.getRow(i);
if (row == null) {
break;
}
short cellsnum = row.getLastCellNum();
String[] cells = new String[cellsnum];
for (int k = 0; k < cellsnum; k++) {
HSSFCell cell = row.getCell((short) k);
Object val = getCellValue(cell);
cells[k] = val == null || "".equals(val.toString()) ? "无" : val.toString();
}
resultList.add(cells);
}
return resultList;
}
/**
* 根据Cell类型返回正确的值
*
* @param cell
* @return
*/
public static Object getCellValue(HSSFCell cell) {
if ((cell == null) || (HSSFCell.CELL_TYPE_BLANK == cell.getCellType())) {
return "";
} else if (HSSFCell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
return cell.getBooleanCellValue();
} else if (HSSFCell.CELL_TYPE_FORMULA == cell.getCellType()) {
return cell.getCellFormula();
} else if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
return DateUtil.getDate2Str(cell.getDateCellValue(), null);
} else {
return cell.getNumericCellValue();
}
} else if (HSSFCell.CELL_TYPE_STRING == cell.getCellType()) {
return cell.getRichStringCellValue().getString();
} else {
return cell.getRichStringCellValue().getString();
}
}
/**
* 根据Cell类型返回正确的值
*
* @param cell
* @return
*/
public static String getCellValueAsString(HSSFCell cell) {
if (cell == null) {
return null;
} else if (HSSFCell.CELL_TYPE_BLANK == cell.getCellType()) {
return "";
} else if (HSSFCell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
return String.valueOf(cell.getBooleanCellValue());
} else if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
return DateUtil.getDate2Str(cell.getDateCellValue(), null);
} else {
DecimalFormat df = new DecimalFormat("#00");
return df.format(cell.getNumericCellValue());
}
} else if (HSSFCell.CELL_TYPE_STRING == cell.getCellType()) {
return cell.getRichStringCellValue().getString();
} else {
return cell.getRichStringCellValue().getString();
}
}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
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;
public class XlsMain {
public static void main(String[] args) throws IOException {
XlsMain xlsMain = new XlsMain();
xlsMain.readXls("f:\\demo.xls");
}
private void readXls(String filename) throws IOException {
InputStream is = new FileInputStream(filename);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
// 循环工作表Sheet
for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
// 循环行Row
for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow == null) {
continue;
}
// 循环列Cell
for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) {
HSSFCell hssfCell = hssfRow.getCell(cellNum);
if (hssfCell == null) {
System.out.print(" " + "null");
continue;
}
System.out.print(" " + getValue(hssfCell));
}
System.out.println();
}
}
}
@SuppressWarnings("static-access")
private String getValue(HSSFCell hssfCell) {
if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
return String.valueOf(hssfCell.getBooleanCellValue());
} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
return String.valueOf(hssfCell.getNumericCellValue());
} else {
return String.valueOf(hssfCell.getStringCellValue());
}
}
}
import java.io.IOException;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class XlsxMain {
public static void main(String[] args) throws IOException {
XlsxMain xlsxMain = new XlsxMain();
xlsxMain.readXlsx("e:/a.xlsx");
}
private void readXlsx(String filename) throws IOException {
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(filename);
// 循环工作表Sheet
for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
if (xssfSheet == null) {
continue;
}
// 循环行Row
for (int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
if (xssfRow == null) {
continue;
}
// 循环列Cell
for (int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++) {
XSSFCell xssfCell = xssfRow.getCell(cellNum);
if (xssfCell == null) {
continue;
}
System.out.print(" " + getValue(xssfCell));
}
System.out.println();
}
}
}
@SuppressWarnings("static-access")
private String getValue(XSSFCell xssfCell) {
if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) {
return String.valueOf(xssfCell.getBooleanCellValue());
} else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) {
return String.valueOf(xssfCell.getNumericCellValue());
} else {
try {
return String.valueOf(xssfCell.getStringCellValue());
} catch (Exception e) {
return "null";
}
}
}
}
分享到:
相关推荐
本笔记将介绍如何使用POI来导入和导出Excel文件。 首先,我们需要将`poi-3.1-FINAL.jar`库添加到项目的类路径中,这样才能使用POI提供的API。导入这个库后,我们就可以开始编写处理Excel文件的代码了。 在示例代码...
- 支持多种Excel格式,如`.xls`和`.xlsx`。 - 提供了丰富的API来创建、读取、修改Excel文件。 - 能够轻松处理复杂的Excel样式、图表等元素。 #### 三、前端触发导出操作 前端页面通过按钮触发导出功能,例如: ```...
这篇笔记将探讨如何在Struts2中实现Excel的导出功能。 首先,我们需要了解Excel的基本概念。Excel是由Microsoft开发的一款电子表格软件,广泛用于数据管理和分析。在编程中,我们可以使用Apache POI库来操作Excel...
在"POI导出Excel笔记"的博客中,可能会详细讲解以下关键知识点: 1. **初始化工作簿**:首先,你需要创建一个Workbook对象,这可以是XSSFWorkbook(用于.xlsx格式,属于新的OOXML格式)或HSSFWorkbook(用于.xls...
虽然用户在Excel中打开时看起来与实际的Excel文件无异,但实际上这是一个HTML文档,而非真正的Excel文件(.xls或.xlsx)。因此,这种方法的局限性在于,生成的文件无法作为数据源被其他程序直接读取或处理。 以下是...
在PHP开发中,有时我们需要处理Excel文件,例如导入数据、导出报告等。PHPExcel是一个流行的PHP库,用于读取、写入和操作不同版本的Microsoft Excel文件。在本文中,我们将探讨如何使用PHPExcel进行基本操作,并结合...
nb2xls-Jupyter笔记本到Excel电子表格通过新的“下载为”选项或通过命令行上的nbconvert将Jupyter笔记本转换为Excel Spreadsheets(xlsx)。 尊重诸如Pandas DataFrames之类的表。 还导出图像数据,例如matplotlib...
使用此工具,您可以将网页导出为 XLS、CSV、XLSX 或 TSV 文件(.xls .csv .xlsx .tsv) 您可以在我们的入门订阅计划中免费使用 DataMiner。您每月将获得 500 个免费页面积分。通过这种方式,您可以了解它的工作原理...
本文将深入探讨这两个工具,并介绍如何使用它们进行Excel数据的导入与导出。 首先,Apache POI是一个开源的API,它允许Java程序创建、修改和显示MS Office格式的文件,包括Excel。Apache POI提供了广泛的API,可以...
- **模块系统**:Node.js采用CommonJS模块规范,通过`require`导入模块,`module.exports`或`exports`导出模块。 - **V8引擎**:Node.js内置了Google的V8引擎,使得JavaScript代码可以被快速编译执行,提供了高...
在Java编程领域,处理Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据导入导出时。本学习笔记将深入探讨如何使用Apache POI库来实现Java对Excel的高效操作。 Apache POI是一个开源项目,提供了读写...
例如,可以使用Microsoft Office Interop库直接操作Excel对象,或者使用开源库如EPPlus,NPOI等来创建XLS或XLSX文件,这些库可以高效地生成大量数据的Excel文件而无需安装Office。 3. **jQuery库版本**:“jQuery v...
Apache POI 提供了 HSSF(Horizontally Stored Spreadsheet Format)和 XSSF(XML Spreadsheet Format)两个主要的 API,分别用于处理老版本的 .xls 文件和新版本的 .xlsx 文件。HSSF 支持 BIFF8 格式,而 XSSF 支持...
1. **Apache POI**:这是一个用Java编写的库,专门用于处理Microsoft Office格式的文件,如XLS和XLSX。它允许开发人员在不使用Microsoft Office的情况下,在服务器端或没有GUI的环境中生成、修改和读取Excel文件。 2...
在Java开发中,处理Excel文件是一个常见的需求,比如数据导入导出、报表生成等。JXL库作为一个轻量级的Java Excel API,为开发者提供了方便快捷的方式来读写Excel文件。本篇笔记将深入探讨JXL库的使用方法和核心功能...
在Java编程语言中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成等场景。`jxl`库是一个广泛使用的开源库,它允许开发者以读写方式操作Excel文件(.xls格式),而无需依赖Microsoft Office。本篇...
CSV(Comma Separated Values)格式则专门用于数据交换,以逗号分隔每个字段,通常被用于导入和导出数据库或电子表格。 HTML(HyperText Markup Language)和CSS(Cascading Style Sheets)则是网页设计的基础,...
6. **数据可视化**:Pandas可以结合Matplotlib或Seaborn库进行数据可视化,将数据结果直接导出为图表,进一步增强报告的可读性。例如,`df.plot()`可以生成简单的线图、柱状图和散点图。 7. **Excel输出**:完成...