急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”

急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”,第1张

POI是Apache下的一个项目,是用Java编写的开源框架,提供API供开发者直接 *** 作Microsoft Office(Excel,Word,PowerPoint)

POI为我们带来了什么

在很多的企业当中,储蓄数据是使用Excel文档的,因为Excel文档的格式方便,也能套用公式,而企业程序是存储在数据库当中,这样就需要一种两者之间互相转换的方法,当企业刚开始使用信息化的管理系统时,也需要将Excel的数据录入到程序当中,这种需求是非常普遍的

POI使用:

首先增加Maven的依赖

<!-- POI核心依赖 -->

<dependency>

<groupId>orgapachepoi</groupId>

<artifactId>poi</artifactId>

<version>38</version>

</dependency>

<!-- 为POI支持Office Open XML -->

<dependency>

<groupId>orgapachepoi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>38</version>

</dependency>

<dependency>

<groupId>orgapachepoi</groupId>

<artifactId>poi-ooxml-schemas</artifactId>

<version>38</version>

</dependency>

<!-- 支持Word文档的 *** 作 -->

<dependency>

<groupId>orgapachepoi</groupId>

<artifactId>poi-scratchpad</artifactId>

<version>38</version>

</dependency>

以下为 *** 作Excel的测试类

package comaccentrixray;

import javaioFile;

import javaioFileOutputStream;

import javaioIOException;

import orgapachepoiopenxml4jexceptionsInvalidFormatException;

import orgapachepoissusermodelCell;

import orgapachepoissusermodelCellStyle;

import orgapachepoissusermodelRow;

import orgapachepoissusermodelSheet;

import orgapachepoissusermodelWorkbook;

import orgapachepoissusermodelWorkbookFactory;

import orgapachepoixssfusermodelXSSFWorkbook;

import orgjunitBefore;

import orgjunitTest;

public class TestExcel {

private Workbook workbook;

/

由于Excel当中的单元格Cell存在类型,若获取类型错误 就会产生错误,

所以通过此方法将Cell内容全部转换为String类型

/

private String getCellValue(Cell cell) {

String str = null;

switch (cellgetCellType()) {

case CellCELL_TYPE_BLANK:

str = "";

break;

case CellCELL_TYPE_BOOLEAN:

str = StringvalueOf(cellgetBooleanCellValue());

break;

case CellCELL_TYPE_FORMULA:

str = StringvalueOf(cellgetCellFormula());

break;

case CellCELL_TYPE_NUMERIC:

str = StringvalueOf(cellgetNumericCellValue());

break;

case CellCELL_TYPE_STRING:

str = StringvalueOf(cellgetStringCellValue());

break;

default:

str = null;

break;

}

return str;

}

@Before

public void setUp() throws InvalidFormatException, IOException {

// 加载excel文件,自动判断是HSSF还是XSSF

workbook = WorkbookFactorycreate(new File("E:/aaaxls"));

}

/

读取一个已存在的Excel

/

@Test

public void testReadExcel() throws InvalidFormatException, IOException {

// 获取第一个工作目录,下标从0开始

Sheet sheet = workbookgetSheetAt(0);

// 获取该工作目录最后一行的行数

int lastRowNum = sheetgetLastRowNum();

for (int i = 0; i < lastRowNum; i++) {

// 获取下标为i的行

Row row = sheetgetRow(i);

// 获取该行单元格个数

int lastCellNum = rowgetLastCellNum();

for (int j = 0; j < lastCellNum; j++) {

// 获取下标为j的单元格

Cell cell = rowgetCell(j);

// 调用获取方法

String cellValue = thisgetCellValue(cell);

}

}

}

/

使用Foreach方式读取Excel

/

@Test

public void testForeachReadExcel() {

// 根据sheet的名字获取

Sheet sheet = workbookgetSheet("test");

// 处了上面testReadExcel的方式读取以外,还支持foreach的方式读取

for (Row row : sheet) {

for (Cell cell : row) {

String cellValue = thisgetCellValue(cell);

Systemoutprintln(cellValue);

}

}

}

/

创建简单的Excel

/

@Test

public void testWriteExcel() throws IOException {

// 创建一个XSSF的Excel文件

workbook = new XSSFWorkbook();

FileOutputStream fos = new FileOutputStream("E:/testxlsx");

// 创建名称为test的工作目录

Sheet sheet = workbookcreateSheet("test");

/

创建1个10行x10列的工作目录

/

for (int i = 0; i < 10; i++) {

// 创建一行

Row row = sheetcreateRow(i);

for (int j = 0; j < 10; j++) {

// 创建一个单元格

Cell cell = rowcreateCell(j);

// 设置单元格value

cellsetCellValue("test");

// 此处为设置Excel的样式,设置单元格内容居中,

// 但这样设置方式并不常用,请留意下面的方法

CellStyle cs = workbookcreateCellStyle();

cssetAlignment(CellStyleALIGN_CENTER);

cellsetCellStyle(cs);

}

}

// 将Excel写出到文件流

workbookwrite(fos);

}

在2003版本的的doc文件中,POI可以使用HWPF很方便的获取range,然后使用replace方法替换文本框中的内容,不过好像Word背景什么都没有了。在docx中,正常的文本段落还是比较方便替换的,但是遇到文本框中的文

按列读取的方法:

String pathname = "E:\\files\\titlexlsx";

File file = new File(pathname);

InputStream in = new FileInputStream(file);

//得到整个excel对象

XSSFWorkbook excel = new XSSFWorkbook(in);

//获取整个excel有多少个sheet

int sheets = excelgetNumberOfSheets();

//便利第一个sheet

Map<String,String> colMap = new HashMap<String, String>();

for(int i = 0 ; i < sheets ; i++ ){

XSSFSheet sheet = excelgetSheetAt(i);

if(sheet == null){

continue;

}

int mergedRegions = sheetgetNumMergedRegions();

XSSFRow row2 = sheetgetRow(0);

Map<Integer,String> category = new HashMap<Integer, String>();

for(int j = 0 ; j < mergedRegions; j++ ){

CellRangeAddress rangeAddress = sheetgetMergedRegion(j);

int firstRow = rangeAddressgetFirstColumn();

int lastRow = rangeAddressgetLastColumn();

categoryput(rangeAddressgetFirstColumn(), rangeAddressgetLastColumn()+"-"+row2getCell(firstRow)toString());

}

//便利每一行

for( int rowNum = 1 ; rowNum <= sheetgetLastRowNum() ; rowNum++ ){

Systemoutprintln();

XSSFRow row = sheetgetRow(rowNum);

if(row == null){

continue;

}

short lastCellNum = rowgetLastCellNum();

String cate = "";

Integer maxIndex = 0;

for( int col = rowgetFirstCellNum() ; col < lastCellNum ; col++ ){

XSSFCell cell = rowgetCell(col);

if(cell == null ){

continue;

}

if(""equals(celltoString())){

continue;

}

int columnIndex = cellgetColumnIndex();

String string = categoryget(columnIndex);

if(string != null && !stringequals("")){

String[] split = stringsplit("-");

cate = split[1];

maxIndex = IntegerparseInt(split[0]);

Systemoutprintln(cate+"<-->"+celltoString());

}else {

//如果当前便利的列编号小于等于合并单元格的结束,说明分类还是上面的分类名称

if(columnIndex<=maxIndex){

Systemoutprintln(cate+"<-->"+celltoString());

}else {

Systemoutprintln("分类未知"+"<-->"+celltoString());

}

}

}

}

}

}

在保护状态下execl的格式有可能正在被使用,你这边修改,准确说是线程冲突,一般excel值会作为导出文件的模板,是不会编辑的。你可以在读的时候判断execl是否正在被使用。

下面的代码问题,你可以参考

package comhwtglmfcommon;

import javaioIOException;

import javaioOutputStream;

import javautilArrayList;

import javautilList;

import javaxservlet>

以上就是关于急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”全部的内容,包括:急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”、java 使用POI导出Excel文件,打开导出文件时报错、如何用Apache POI *** 作Excel文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9823993.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存