对于我正在研究的这个项目,我想要获取多个excel表,然后将它们合并为一个,操作数据,以使所有内容更具可读性。
打开文件,阅读内容,存储内容,创建新文件(.csv),然后将信息粘贴到我选择的组织中的最佳方法是什么?
我肯定需要坚持使用java,因为这将是预先存在的自动化流程的一部分,我不想将所有内容更改为其他语言。
那里有一个我应该知道的有用的包吗?
非常感谢
瑞斯蒂昂
答案 0 :(得分:2)
我认为Excel中的任何认真工作都应该考虑Joel's允许Office在必要时远程调用的Windows计算机上为您执行此操作的解决方案。但是,如果您的需求足够简单,或者您确实需要纯Java解决方案,那么Apache的POI库可以做得非常好。
答案 1 :(得分:1)
据我所知,csv不是特定于Excel的,而只是一个“comma-separated values” - 文件。
所以this可能对您有所帮助。
答案 2 :(得分:0)
出于显而易见的原因,编写CSV文件通常非常简单。您可以编写自己的帮助程序类来执行此操作。需要注意的是确保您没有任何输出中的分隔符。
阅读CSV比较棘手。没有像Python那样的标准库(一种更好的语言,恕我直言,用于进行CSV处理),但是如果你搜索它,那里有很多不错的免费实现。
最大的问题是程序中的内部表示:根据输入和输出的大小,将所有内容保存在内存中可能是不可能的。你能一次性完成所有事吗? (我的意思是,读一些,写一些等等)
您可能还想使用稀疏表示而不是仅表示数组中的所有电子表格。
答案 3 :(得分:0)
也许你应该尝试这个: Jxcell,它是一个java电子表格组件,可以读/写/编辑所有xls / xlsx / csv文件。
答案 4 :(得分:0)
尝试此代码
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.TimeoutException;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;
public class App {
public void convertExcelToCSV(Sheet sheet, String sheetName) {
StringBuffer data = new StringBuffer();
try {
FileOutputStream fos = new FileOutputStream("C:\\Users\\" + sheetName + ".csv");
Cell cell;
Row row;
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
cell = cellIterator.next();
CellType type = cell.getCellTypeEnum();
if (type == CellType.BOOLEAN) {
data.append(cell.getBooleanCellValue() + ",");
} else if (type == CellType.NUMERIC) {
data.append(cell.getNumericCellValue() + ",");
} else if (type == CellType.STRING) {
data.append(cell.getStringCellValue() + ",");
} else if (type == CellType.BLANK) {
data.append("" + ",");
} else {
data.append(cell + ",");
}
}
data.append('\n');
}
fos.write(data.toString().getBytes());
fos.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String [] args)
{
App app = new App();
String path = "C:\\Users\\myFile.xlsx";
InputStream inp = null;
try {
inp = new FileInputStream(path);
Workbook wb = WorkbookFactory.create(inp);
for(int i=0;i<wb.getNumberOfSheets();i++) {
System.out.println(wb.getSheetAt(i).getSheetName());
app.convertExcelToCSV(wb.getSheetAt(i),wb.getSheetAt(i).getSheetName());
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
finally {
try {
inp.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
}