在JAVA中尝试将数据写入多个工作表时,XLSX文件损坏
我是JAVA新手。我需要将特定文件夹中的多个文件加载到excel xlsx(不是xls文件,因为输入文件有超过65k条记录)文件的不同工作表中。下面是我写的代码。xlsx文件已损坏,无法打开。你能帮忙吗在JAVA中尝试将数据写入多个工作表时,XLSX文件损坏,java,excel,apache-poi,Java,Excel,Apache Poi,我是JAVA新手。我需要将特定文件夹中的多个文件加载到excel xlsx(不是xls文件,因为输入文件有超过65k条记录)文件的不同工作表中。下面是我写的代码。xlsx文件已损坏,无法打开。你能帮忙吗 public class twotxttoxlsx{ public static void main(String[]args){ try{ File folder = new File("C:/tx
public class twotxttoxlsx{
public static void main(String[]args){
try{
File folder = new File("C:/txttoxls/");
File[] listOfFiles = folder.listFiles();
XSSFWorkbook workbook=new XSSFWorkbook();
for (File file : listOfFiles) {
if (file.isFile()) {
String thisline;
ArrayList<String> al = null;
ArrayList<ArrayList<String>> arlist = new ArrayList<ArrayList<String>>();
XSSFSheet sheet = workbook.createSheet(file.getName());
FileInputStream fis = new FileInputStream(file);
System.out.println("Got here");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
while ((thisline = br.readLine()) != null) {
al = new ArrayList<String>();
String strar[] = thisline.split("#");
for (int j = 0; j < strar.length; j++) {
for (int k = 0; k < arlist.size(); k++) {
ArrayList<String> ardata = (ArrayList<String>) arlist.get(k);
XSSFRow row = sheet.createRow((short) k);
for (int p = 0; p < ardata.size(); p++) {
XSSFCell cell = row.createCell((short) p);
cell.setCellValue(ardata.get(p).toString());
}
}
al.add(strar[j]);
}
arlist.add(al);
}
fis.close();
FileOutputStream fileOut = new FileOutputStream("C:/txttoxls/Test.xlsx");
workbook.write(fileOut);
fileOut.flush();
fileOut.close();
br.close();
}
}
System.out.println("Your excel file has been generated!");
} catch ( Exception ex ) {
System.out.println(ex);
}
}
}
公共类TwoTxToxLSX{
公共静态void main(字符串[]args){
试一试{
文件夹=新文件(“C:/TXTOXLS/”;
File[]listOfFiles=folder.listFiles();
XSSFWorkbook工作簿=新XSSFWorkbook();
对于(文件:listOfFiles){
if(file.isFile()){
把这条线串起来;
ArrayList al=null;
ArrayList arlist=新的ArrayList();
XSSFSheet sheet=workbook.createSheet(file.getName());
FileInputStream fis=新的FileInputStream(文件);
System.out.println(“到达这里”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(fis));
而((thisline=br.readLine())!=null){
al=新的ArrayList();
String strar[]=thisline.split(“#”);
对于(int j=0;j
于4月27日编辑:工作代码,但存在性能问题
import java.io.*;
import java.util.ArrayList;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFCell;
public class createXLSXfileTest{
public static void main(String[]args){
XSSFWorkbook workbook=new XSSFWorkbook();
XSSFSheet sheet = (XSSFSheet) workbook.createSheet("sheet1");
XSSFSheet sheet1 = (XSSFSheet) workbook.createSheet("Sheet2");
try{
File file = new File("C:/Users/Desktop/file1.txt");
FileOutputStream fileOut = new FileOutputStream("C:/Users/Desktop/test.xlsx");
if (file.isFile()) {
String thisline;
ArrayList<String> al = null;
ArrayList<ArrayList<String>> arlist = new ArrayList<ArrayList<String>>();
FileInputStream fis = new FileInputStream(file);
System.out.println("loading 1st file");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
while ((thisline = br.readLine()) != null) {
al = new ArrayList<String>();
String strar[] = thisline.split("#");
for (int j = 0; j < strar.length; j++) {
for (int k = 0; k < arlist.size(); k++) {
ArrayList<String> ardata = (ArrayList<String>) arlist.get(k);
XSSFRow row = sheet.createRow((short) k);
for (int p = 0; p < ardata.size(); p++) {
XSSFCell cell = row.createCell((short) p);
cell.setCellValue(ardata.get(p).toString());
}
}
al.add(strar[j]);
}
arlist.add(al);
}
fis.close();
}
File file1 = new File("C:/Users/Desktop/file2.txt");
if (file1.isFile()) {
String thisline;
ArrayList<String> al = null;
ArrayList<ArrayList<String>> arlist = new ArrayList<ArrayList<String>>();
FileInputStream fis = new FileInputStream(file1);
System.out.println("loading 2nd file");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
while ((thisline = br.readLine()) != null) {
al = new ArrayList<String>();
String strar[] = thisline.split("#");
for (int j = 0; j < strar.length; j++) {
for (int k = 0; k < arlist.size(); k++) {
ArrayList<String> ardata = (ArrayList<String>) arlist.get(k);
XSSFRow row = sheet1.createRow((short) k);
for (int p = 0; p < ardata.size(); p++) {
XSSFCell cell = row.createCell((short) p);
cell.setCellValue(ardata.get(p).toString());
}
}
al.add(strar[j]);
}
arlist.add(al);
}
fis.close();
workbook.write(fileOut);
fileOut.flush();
fileOut.close();
br.close();
System.out.println("Your excel file has been generated!");
}} catch ( Exception ex ) {
System.out.println(ex);
}
}
}
import java.io.*;
导入java.util.ArrayList;
导入org.apache.poi.xssf.usermodel.xssfheet;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入org.apache.poi.xssf.usermodel.XSSFRow;
导入org.apache.poi.xssf.usermodel.XSSFCell;
公共类createXLSXfileTest{
公共静态void main(字符串[]args){
XSSFWorkbook工作簿=新XSSFWorkbook();
XSSFSheet sheet=(XSSFSheet)workbook.createSheet(“sheet1”);
XSSFSheet sheet1=(XSSFSheet)workbook.createSheet(“Sheet2”);
试一试{
File File=新文件(“C:/Users/Desktop/file1.txt”);
FileOutputStream fileOut=newfileoutputstream(“C:/Users/Desktop/test.xlsx”);
if(file.isFile()){
把这条线串起来;
ArrayList al=null;
ArrayList arlist=新的ArrayList();
FileInputStream fis=新的FileInputStream(文件);
System.out.println(“加载第一个文件”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(fis));
而((thisline=br.readLine())!=null){
al=新的ArrayList();
String strar[]=thisline.split(“#”);
对于(int j=0;j
我唯一能看到的是,您的工作表名称可能有问题
XSSFSheet sheet=workbook.createSheet(file.getName())代码>
Excel工作表的名称非常严格。最大长度为31,不允许使用许多特殊字符,包括/[]:\?
等。考虑编写一个“TooKeStEntNeX”函数,将文件名清理为合法的文件名。