使用Java创建和编辑Excel文档(.csv)
对于我正在进行的这个项目,我希望获取多个excel工作表,然后将它们合并为一个,按照我的意愿处理数据,使所有内容都更具可读性 打开文件、读取其内容、存储该内容、创建新文件(.csv)然后将信息粘贴到我选择的组织中的最佳方式是什么 我肯定需要坚持使用java,因为这将是一个预先存在的自动化过程的一部分,我不想将所有内容都更改为另一种语言 有没有我应该知道的有用的软件包 非常感谢使用Java创建和编辑Excel文档(.csv),java,excel,file,csv,package,Java,Excel,File,Csv,Package,对于我正在进行的这个项目,我希望获取多个excel工作表,然后将它们合并为一个,按照我的意愿处理数据,使所有内容都更具可读性 打开文件、读取其内容、存储该内容、创建新文件(.csv)然后将信息粘贴到我选择的组织中的最佳方式是什么 我肯定需要坚持使用java,因为这将是一个预先存在的自动化过程的一部分,我不想将所有内容都更改为另一种语言 有没有我应该知道的有用的软件包 非常感谢 Justian据我所知,csv并不是excel特有的,而是一个“”文件 写CSV文件通常很简单,原因很明显。您可以编写自
Justian据我所知,csv并不是excel特有的,而是一个“”文件
写CSV文件通常很简单,原因很明显。您可以编写自己的helper类来实现这一点。注意事项是确保您的任何输出中都没有delimeter 阅读CSV更为棘手。没有像Python中那样的标准库(一种做CSV处理的更好的语言,IMHO),但是如果你搜索它,有很多不错的免费实现 最大的问题是程序中的内部表示:根据输入和输出的大小,将所有内容保留在内存中可能是不可能的。你能一次做完所有事情吗?(我是说,读一些,写一些,等等)
您可能还希望使用稀疏表示而不是仅仅表示数组中的所有电子表格。
< P>我认为Excel中的任何严肃工作都应该考虑让Office为您在需要时远程调用的Windows机器上执行它的解决方案。但是,如果您的需求足够简单,或者您确实需要纯Java解决方案,Apache的库就足够了。也许您应该试试这个: ,它是一个java电子表格组件,可以读取/写入/编辑所有xls/xlsx/csv文件。试试这段代码 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());
}
}
}
}
import java.util.*;
导入java.util.Map.Entry;
导入java.util.concurrent.TimeoutException;
导入java.util.logging.Logger;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入org.apache.poi.ss.usermodel.*;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;
公共类应用程序{
public void convertExcelToCSV(工作表、字符串工作表名称){
StringBuffer数据=新的StringBuffer();
试一试{
FileOutputStream fos=新的FileOutputStream(“C:\\Users\\”+sheetName+“.csv”);
细胞;
行行;
迭代器rowIterator=sheet.Iterator();
while(roweiterator.hasNext()){
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
cell=cellIterator.next();
CellType=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('\n');
}
fos.write(data.toString().getBytes());
fos.close();
}
catch(filenotfounde异常)
{
e、 printStackTrace();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
公共静态void main(字符串[]args)
{
App App=新App();
String path=“C:\\Users\\myFile.xlsx”;
InputStream inp=null;
试一试{
inp=新文件inputstream(路径);
工作簿wb=WorkbookFactory.create(inp);
对于(int i=0;iExcel文件比CSV多得多。CSV到excel就像文本文件到Word。读一些,写一些绝对是我希望做的。只是,据我所知,编辑现有文件没有太大的灵活性,只是根据您选择的内容创建一个。您所说的“编辑”是什么意思现有文件?创建新文件时,即使是excel也会简单地替换该版本。通过适当的API或设计,您可以编写“复制”的文件一个文件,并在相关时引入更改,如基于事件的解析器。比方说,我不想保存程序中的所有数据。我会用起始行/值创建该文件,然后在需要添加时重新打开它。当然,我必须评估效率。存储更多数据与打开/写入。是的。这是真的。CSV并不特定于excel,但我想大多数人都会理解,如果我把它与一个普通程序联系起来会更好。这看起来很棒,尽管有点混乱。我正在研究它。谢谢,但这不是我想要的。这是一个用Java制作的电子表格程序。我需要一些可以用Java使用的东西。