使用Java创建和编辑Excel文档(.csv)

时间:2010-06-28 16:01:21

标签: java excel file csv package

对于我正在研究的这个项目,我想要获取多个excel表,然后将它们合并为一个,操作数据,以使所有内容更具可读性。

打开文件,阅读内容,存储内容,创建新文件(.csv),然后将信息粘贴到我选择的组织中的最佳方法是什么?

我肯定需要坚持使用java,因为这将是预先存在的自动化流程的一部分,我不想将所有内容更改为其他语言。

那里有一个我应该知道的有用的包吗?

非常感谢

瑞斯蒂昂

5 个答案:

答案 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());
                }
            }
        }
    }