我正在尝试读取文本文件,然后对其应用一些数据验证规则。添加规则后,我将数据写回Excel文件。
但是当尝试将其写回excel文件时,我收到了这个错误:
线程“主”org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException:保存失败:保存包时发生错误:部分 /docProps/app.xml无法保存在流中,编组器org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller@74ad1f1forg.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:479)在org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1414)在org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:179)在com.gbt.POC.TxtFileReader.main(TxtFileReader.java:359)由org.apache.poi.openxml4j.exceptions.OpenXML引起4JException:部分 /docProps/app.xml无法保存在流中,编组器org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller@74ad1f1f在org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:470)…3更多
以下是我目前的情况:
LinkedList < String[] > llist = new LinkedList < > ();
String[] data;
XSSFWorkbook workBook = new XSSFWorkbook();
FileOutputStream outstream = new FileOutputStream("data.xls");
XSSFSheet spreadSheet = workBook.createSheet("Clean");
for (int i = 0; i < llist.size(); i++) {
if (i == 0) {
System.out.println("Hello World!");
} else {
data = llist.get(i);
String empid1 = data[0];
String fname = data[1];
String ccode1 = data[2];
if (data[2].equals("IND")) {
replace = data[2].replaceAll("IND", "IN");
ccode1 = replace;
} else if (data[2].equals("USA")) {
replace = data[2].replaceAll("USA", "US");
ccode1 = replace;
} else {
ccode1 = data[2];
}
//String newData=empid1+","+fname+","+ccode1;
XSSFRow row = spreadSheet.createRow(i);
XSSFCell cell = row.createCell(0);
cell.setCellValue(empid1);
cell = row.createCell(1);
cell.setCellValue(fname);
cell = row.createCell(2);
cell.setCellValue(ccode1);
}
}
workBook.write(outstream);
任何帮助都是提前赞赏的。
您可以使用Xcelite图书馆让您的生活更加轻松:
>
首先创建一个小bean类
创建一个Xcelite对象,并让它创建一个工作表
获取作家
给你写豆子
写入输出流
import com.ebay.xcelite.annotations.Column;
public class Entity {
@Column
String empid1;
@Column
String fname;
@Column
String ccode1;
}
Xcelite xcelite = new Xcelite();
XceliteSheet sheet = xcelite.createSheet("Clean");
SheetWriter writer = sheet.getBeanWriter(Entity.class);
writer.write(entities);
xcelite.write(outstream);
总而言之,这里是您修改的代码:
LinkedList<String[]> llist = new LinkedList <> ();
String in0[] = new String[3];
llist.add(in0);
String in1[] = new String[3];
in1[0] = "1";
in1[1] = "testtest";
in1[2] = "IND";
llist.add(in1);
String[] data;
FileOutputStream outstream = new FileOutputStream( "C:\\Users\\Desktop\\data.xls");
Xcelite xcelite = new Xcelite();
XceliteSheet sheet = xcelite.createSheet("Clean");
SheetWriter writer = sheet.getBeanWriter(Entity.class);
List<Entity> entities = new ArrayList<>();
for (int i = 0; i < llist.size(); i++) {
if (i == 0) {
System.out.println("Hello World!");
} else {
data = llist.get(i);
String ccode1 = data[2];
String replace;
if (data[2].equals("IND")) {
replace = data[2].replaceAll("IND", "IN");
ccode1 = replace;
} else if (data[2].equals("USA")) {
replace = data[2].replaceAll("USA", "US");
ccode1 = replace;
} else {
ccode1 = data[2];
}
Entity entity = new Entity();
entities.add(entity);
entity.empid1 = data[0];
entity.fname = data[1];
entity.ccode1 = ccode1;
}
}
writer.write(entities);
xcelite.write(outstream);
}
我复制并粘贴了你的代码,看看是什么错误。不幸的是,我看不到你的错误。但在搜索错误后,我找到了一些答案。。
发生此异常是因为excel工作表的POI API多次写入excel工作表。每次它都需要在同一个File对象上创建一个新的FileOutputStream实例。
要解决此问题,请先将所有行写入工作簿实例,然后使用FileOutputStream写入工作簿。
https://tjavadeeps . WordPress . com/2015/04/14/org-Apache-poi-open XML 4j-exceptions-open XML 4 jruntimeexception-fail-to-save-an-error-occurs-while-saving-the-package/
org . Apache . poi . open XML 4j . exceptions . open XML 4 jruntimeexception:保存失败
希望你得到一个提示。
接下来,我制作了我的txt文件,并像你做的那样保存到excel,它工作了,
package excelTest;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.LinkedList;
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;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class readExcel {
public static void main(String[] args) throws IOException {
LinkedList<String> llist = new LinkedList<>();
String[] data = null;
String replace = "";
XSSFWorkbook workBook = new XSSFWorkbook();
FileOutputStream outstream = new FileOutputStream( "C:\\Users\\Desktop\\data.xls");
XSSFSheet spreadSheet = workBook.createSheet("Clean");
/*
* MyFile.txt
----------------------
0
IND
USA
LOVE
----------------------
*/
try (BufferedReader br = new BufferedReader(new FileReader( "C:\\Users\\Desktop\\myFile.txt"))) {
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
llist.add(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
}
String empid1 = "";
String fname = "";
String ccode1 = "";
System.out.println("llist.get(i)"+llist.get(0)+" "+llist.get(1));
for (int i = 0; i < llist.size(); i++){
System.out.println(llist.get(i));
}
empid1 = llist.get(1); //IND
fname = llist.get(2); //USA
ccode1 =llist.get(3); //LOVE
if (fname.equals("IND")) {
replace = fname.replaceAll("IND", "IN");
ccode1 = replace;
} else if (fname.equals("USA")) {
replace = fname.replaceAll("USA", "US");
ccode1 = replace; //'LOVE' CHANGE TO US. (IF YOU WANT TO CHANGE TO US IN HERE-> fname=fname.replaceAll("USA","US");
} else {
ccode1 = fname; //'LOVE' CHANGE TO USA AGAIN.
}
XSSFRow row = spreadSheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue(empid1);
cell = row.createCell(1);
cell.setCellValue(fname);
cell = row.createCell(2);
cell.setCellValue(ccode1);
workBook.write(outstream);
}
}
我正在使用Maven创建一个Selenium项目,其中我试图从Excel文件(xlsx)中读取“username”和“password”。 这是密码- 我得到的错误在这一行: Driver.FindElement(By.XPath(“//input[@type='text']”)).SendKeys(Sheet.GetRow(i).GetCell(j).GetStringCellValue());
我试图将一个目录中的几个csv文件读入pandas,并将它们连接到一个大数据帧中,但出现以下错误: 这是我的密码 我不知道为什么它不起作用。我试图用chmod解决这个问题,但一切都变了
我正试图将数据从Excel导入到SQL Server表中,但遇到了这个错误。你能建议如何避免这些吗?
我忙于一项学校作业,我有一个由三个表组成的基本access数据库。Book、Reader和BookRated,其中as BookRated是交集表,主键userName来自Reader和ISBN来自Book组成BookRated的复合主键(作为外键)。 我正试图将信息插入书签表中,但出现以下错误
新数组列表 我用多头填充这个数组列表。 当我试图将其插入postgresql时,我使用以下方法: 使用JDBC模板。但是当我试图运行这段代码时,它在“ARRAY[?]”上给出了一个错误。但如果temp2是一个单一的数字,比如:1253214,它就可以工作。有人有主意吗? 我的错误是: PreparedStatementCallback;错误的SQL语法[UPDATE pb1plnitm SET p
我正在阅读一个用一些分隔符分隔的文本文件。 我的文本文件内容示例 Avc def efg JKSJD 1 2 3 5 3 4 6 0 每次调用createRow和createCell时是否都会创建新对象? 如果是,有什么替代方案?。如何以更好的性能将大数据写入excel?