java - 在 Java 中将 .csv 转换为 .xls

标签 java csv xls xlsx

这里有人知道用 java 将 csv 文件转换为 xls 或 xlsx 文件的任何快速、干净的方法吗?

我已经有一些东西可以管理 csv 文件,我需要其他程序的额外兼容性。

除了包名之外的示例代码总是很受欢迎。

非常感谢,

贾斯蒂安

到目前为止,这是我的代码。我需要从行中删除返回 ("\n")。我的一些单元格包含多行信息(列表),因此我可以在 csv 中使用“\n”来指示 单元格 中的多行,但 xls 将这些视为我的意思在新的上。

代码是从网上修改的,目前有点乱。您可能会注意到一些已弃用的方法,因为它是在 2004 年编写的,并且一定要忽略糟糕的 return 语句。我目前只是使用 S.o.p 进行测试,稍后我会清理它。

package jab.jm.io;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class FileConverter {

    public static String ConvertCSVToXLS(String file) throws IOException {

        if (file.indexOf(".csv") < 0)
            return "Error converting file: .csv file not given.";

        String name = FileManager.getFileNameFromPath(file, false);
        ArrayList<ArrayList<String>> arList = new ArrayList<ArrayList<String>>();
        ArrayList<String> al = null;

        String thisLine;
        DataInputStream myInput = new DataInputStream(new FileInputStream(file));

        while ((thisLine = myInput.readLine()) != null) {
            al = new ArrayList<String>();
            String strar[] = thisLine.split(",");

            for (int j = 0; j < strar.length; j++) {
                // My Attempt (BELOW)
                String edit = strar[j].replace('\n', ' ');
                al.add(edit);
            }

            arList.add(al);
            System.out.println();
        }

        try {
            HSSFWorkbook hwb = new HSSFWorkbook();
            HSSFSheet sheet = hwb.createSheet("new sheet");

            for (int k = 0; k < arList.size(); k++) {
                ArrayList<String> ardata = (ArrayList<String>) arList.get(k);
                HSSFRow row = sheet.createRow((short) 0 + k);

                for (int p = 0; p < ardata.size(); p++) {
                    System.out.print(ardata.get(p));
                    HSSFCell cell = row.createCell((short) p);
                    cell.setCellValue(ardata.get(p).toString());
                }
            }

            FileOutputStream fileOut = new FileOutputStream(
                    FileManager.getCleanPath() + "/converted files/" + name
                            + ".xls");
            hwb.write(fileOut);
            fileOut.close();

            System.out.println(name + ".xls has been generated");
        } catch (Exception ex) {
        }

        return "";
    }
}

最佳答案

不知道你是否已经知道了,但是:

  • Excel(如果这是您的真正目标)可以轻松地直接读取 .csv 文件,因此您所做的任何转换都只是出于对“天赋”较低的用户的礼貌。<
  • CSV 是一种最小公分母格式。任何转换器都不可能将信息添加到 .csv 文件中,从而使其更有用。换句话说,CSV 是一种“愚蠢”的格式,将其转换为 .xls 会(可能)增加文件大小,但不会使格式更智能。

Curtis 关于 POI 的建议也是我首先想到的。

如果您在 Windows 机器上进行此转换,另一种选择可能是 Jacob ,一个 Java-COM 桥接器,允许您从 Java 程序有效地远程控制 Excel,以便执行诸如打开文件和以不同格式保存之类的操作,甚至可能应用一些格式更改等。

最后,我还成功地将 SQL INSERT(通过 JDBC)插入到通过 JDBC-ODBC 桥访问的 Excel 工作表中。即 ODBC 可以使 Excel 文件看起来像数据库。虽然它不是很灵活,但您不能要求数据库创建任意命名的 .XLS 文件。


编辑:

在我看来 readLine() 已经没有给你整行了。怎么知道回车不是行终止符呢?您应该能够在 readLine() 之后立即使用调试打印语句来验证这一点。

如果确实如此,那就糟透了,因为前进的方向是你

  • 识别不完整的行并在事后将它们粘贴在一起,
  • 或者编写您自己的 readLine() 替代品。一种简单的方法是逐个字符地读取,替换 CSV 字符串中的 CR,并在 StringBuilder 中累积文本,直到您觉得有一个完整的行。

这两种选择都是您可能不期待的工作。

关于java - 在 Java 中将 .csv 转换为 .xls,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3189308/

相关文章:

java - 为什么这两个 for 循环给出不同的结果?

excel - 用于 Excel 的开源 JDBC 驱动程序,Maven 存储库上的 CSV 文件

java - 创建最大公约数程序,但数组参数有问题

java - 为 JUnit 测试提供输入

python - 读取管道分隔的 CSV 后出现 KeyError

Swift:使用命令行工具将 .strings 文件解析为 .csv 文件

database - 将 xls 文件上传到数据库的最快方法

excel - 将 JavaFX TableView 数据导出到 Excel (XLS)

r - read.xls-读取长度可变的工作表列表及其名称

java - 在 Java 中创建对象的正确方法是什么?