【问题标题】:How to create an Excel file based on CSV file using Java?如何使用 Java 创建基于 CSV 文件的 Excel 文件?
【发布时间】:2011-09-24 05:13:03
【问题描述】:

我需要使用 Java 在 CSV 文件的基础上创建 XLS 文件。

请告诉我哪个 API 最适合创建 excel 文件。

谢谢

【问题讨论】:

    标签: java excel csv


    【解决方案1】:

    我建议你使用Apache POI framework(特别是HSSF / XSSF API)来写出XLS文件。

    对于读取 CSV 文件,我建议您使用 OpenCSV,因为它会为您处理转义字符等。

    将来自here 的 POI 示例和来自here 的 OpenCSV 示例放在一起可以得到:

    import java.io.*;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import au.com.bytecode.opencsv.CSVReader;
    
    class Test {
        public static void main(String[] args) throws IOException {
            Workbook wb = new HSSFWorkbook();
            CreationHelper helper = wb.getCreationHelper();
            Sheet sheet = wb.createSheet("new sheet");
    
            CSVReader reader = new CSVReader(new FileReader("data.csv"));
            String[] line;
            int r = 0;
            while ((line = reader.readNext()) != null) {
                Row row = sheet.createRow((short) r++);
    
                for (int i = 0; i < line.length; i++)
                    row.createCell(i)
                       .setCellValue(helper.createRichTextString(line[i]));
            }
    
            // Write the output to a file
            FileOutputStream fileOut = new FileOutputStream("workbook.xls");
            wb.write(fileOut);
            fileOut.close();
        }
    }
    

    【讨论】:

    • 当你的 csv 有超过 100k 行时,这将是非常慢的方法
    【解决方案2】:

    使用 Groovy,我会这样做:

    // groovy to generate large csv file
    def GROOVY_HOME = new File( System.getenv('GROOVY_HOME') )
    if ( !GROOVY_HOME.canRead() ) {
      println( "Missing environment variable GROOVY_HOME: '${GROOVY_HOME}'" )
      System.exit(0)
    }
    
    File file = new File("csv.csv")
    if ( file.exists() ) {
        assert file.delete()
        assert file.createNewFile()
    }
    
    boolean append = true
    FileWriter fileWriter = new FileWriter(file, append)
    BufferedWriter buffWriter = new BufferedWriter(fileWriter)
    
    buffWriter.write "sdiType=ReferenceValue,,,\n"
    buffWriter.write "ListName,ListStartDate,Value,ValueStartDate\n"
    println( "Writing to file 'csv.csv'" )
    
    def y = 5000
    while ( y-- > 0 ) {
        buffWriter.write "test" + y + ",1/1/2001,2008,1/1/2001\n"
    }
    
    buffWriter.flush()
    buffWriter.close()
    

    【讨论】:

      【解决方案3】:

      你可以试试Aspose.Cells for Java。您可以将此组件用于open a CSV filesave it as XLS file 使用Java。它还可以帮助您使用不同的 Excel 文件版本。

      披露:我在 Aspose 担任开发布道师。

      【讨论】:

        【解决方案4】:

        Apache POI 是一个可以处理各种微软办公文档的库,包括MS Excel。您可以使用简单的 java 代码读取 csv 文件的内容,并使用该库创建和保存 MS Excel 文档。

        【讨论】:

          【解决方案5】:

          有很多检查

          http://jexcelapi.sourceforge.net/

          你会得到很多选择。只是谷歌。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-01-23
            • 2019-08-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-26
            相关资源
            最近更新 更多