目前我使用下面的代码使用java.Its将Xlsx文件转换为csv花费更多时间,因为下面的代码使用迭代器来执行此过程。但我需要任何其他更好的解决方案,使用java将xlsx转换为csv。请帮助我
{{1}}
谢谢&问候, Tharanya B
答案 0 :(得分:2)
尝试使用POI API。这是参考链接
答案 1 :(得分:0)
使用apache POI将xls / xlsx转换为csv的简单方法。
公共类 XLSXToCSVConverter {
public InputStream convertxlstoCSV(InputStream inputStream) throws IOException, InvalidFormatException {
Workbook wb = WorkbookFactory.create(inputStream);
return csvConverter(wb.getSheetAt(0));
}
private InputStream csvConverter(Sheet sheet) {
Row row = null;
String str = new String();
for (int i = 0; i < sheet.getLastRowNum()+1; i++) {
row = sheet.getRow(i);
String rowString = new String();
for (int j = 0; j < 3; j++) {
if(row.getCell(j)==null) {
rowString = rowString + Utility.BLANK_SPACE + Utility.COMMA;
}
else {
rowString = rowString + row.getCell(j)+ Utility.COMMA;
}
}
str = str + rowString.substring(0,rowString.length()-1)+ Utility.NEXT_LINE_OPERATOR;
}
System.out.println(str);
return new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
}
}
希望这对您有帮助,谢谢。
答案 2 :(得分:0)
text extractors 将转储整个工作簿的 TSV。性能取决于所选的实现方式和您的内存可用性。
然后您可以将其通过管道传输到 CSVPrinter
以获得正确的 CSV 输出。我认为 Excel 单元格不能包含制表符,所以这应该是安全的。如果您的单元格中有换行符,我不确定 TSV 输出是否有效,但如果有效,您可以使用 CSVParser
读取它。
XSSFWorkbook input = new XSSFWorkbook(new File("input.xlsx"));
CSVPrinter output = new CSVPrinter(new FileWriter("output.csv"), CSVFormat.DEFAULT);
String tsv = new XSSFExcelExtractor(input).getText();
BufferedReader reader = new BufferedReader(new StringReader(tsv));
reader.lines().map(line -> line.split("\t").forEach(output::printRecord);
如果将整个 this 作为 String
缓冲效率太低,请复制提取器的实现并直接写入 CSVPrinter
。