我是JAVA新手。我需要将特定文件夹中的多个文件加载到excel xlsx(不是xls文件,因为输入文件有超过65k记录)文件的不同工作表中。下面是我编写的代码。xlsx文件损坏了,无法打开。你能帮忙吗?
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);
}
}
}
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);
}
}
}
我唯一能看到的是,您的工作表名称可能是一个问题。
< code > xssf sheet sheet = workbook . create sheet(file . getname());
Excel工作表名称非常严格。最大长度31,不允许使用许多特殊字符,包括< code>/[]:\?等等。考虑编写一个“toWorksheetName”函数,将文件名整理成合法的表名。
您可以尝试的另一件事是尝试使用POI读取XLS。这可能有助于缩小问题的范围。帮助位于“使用.xlsx文件”下。
在旁注:您不需要关闭fis
;关闭 br
就足够了。Close() 从装饰器向下传递到包装的流。不过,这不会破坏任何东西。
我有一段代码,目前正在写入一个
我有一个存储在变量中的数据,然后我想把我的数据写到excel文件中。xlsx)。(即)我使用自动化测试工具,如硒从网页上获取数据,我把它存储在变量,我想写在xlsx文件 在大量的谷歌搜索后,我发现许多用户使用列表或对象来写入。xlsx文件。 我创建了一个列表并将我的变量添加到该列表中,并使用循环语句(for循环)通过打印来检查我的数据是否存储在列表中。 然后我创建了XSSFWorkbook和XSS
问题内容: 如果您曾经使用过p2p下载软件,则他们可以使用多线程下载文件,并且只能创建一个文件,所以我想知道线程如何将数据写入该文件。顺序还是并行? 想象一下,您想将大数据库表转储到文件中,以及如何使这项工作更快? 问题答案: 您可以使用多个线程将a写入文件(例如日志文件)。但是您必须协调@Thilo指出的线程。您需要同步文件访问并仅写入整个记录/行,或者需要制定一种策略来将文件的区域分配给不同的
问题内容: 嗨,我在nodejs脚本中使用了每个循环,以将多个文件写入本地位置。对于courseTitleArray,我在使用“ Biology 101,ruby”,并且我可以 成功 写入一个文件,但 不能同时 写入两个文件。请帮助我出来。 到目前为止,这是我的代码 在控制台中,我得到以下日志。 看起来循环工作正常,并且在日志中我可以看到两个标题。但是在撰写《生物学101,红宝石》时,已经执行了两
在spring batch中,我有一个需求,其中我有来自数据库的客户对象列表,我需要从这个列表中创建多个文本文件。 我希望将每个客户的数据写入不同的文本文件,如 提前谢了。
然后另一个问题是工作簿的名称都不同,所有300个。是否有一个宏可以复制我打开的工作簿,而不是每次都输入实际的名称?