如何读取像文本一样的excel(.xls)文件?

时间:2014-10-01 19:06:49

标签: java excel utf-8 character-encoding

我需要阅读我收到的excel(.xls)文件。 使用常规字符集,如UTF-8,Cp1252,ISO-8859-1,UTF-16LE,这些都没有帮助我,字符仍然是格式错误。

所以我搜索最终使用juniversalchardet,它向我显示字符集是MacCyrillic,使用MacCyrillic来读取文件,但仍然是同样奇怪的结果。

当我在excel上打开文件时一切都很好,所有的角色都很好,因为它的葡萄牙语充满了whit等等。但打开惠特记事本或通过java文件都搞砸了。 但是如果在我的Excel上打开文件然后像.txt那样再次保存它就变得可读了

我找到字符集的方法

    public static void lerCharset(String fileName) throws IOException {
    byte[] buf = new byte[50000000];
    FileInputStream fis = new FileInputStream(fileName);

    // (1)
    UniversalDetector detector = new UniversalDetector(null);

    // (2)
    int nread;
    while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
        detector.handleData(buf, 0, nread);
    }
    // (3)
    detector.dataEnd();

    // (4)
    String encoding = detector.getDetectedCharset();
    if (encoding != null) {
        System.out.println("Detected encoding = " + encoding);
    } else {
        System.out.println("No encoding detected.");
    }

    // (5)
    detector.reset();
    fis.close();
}

我怎样才能发现正确的字符集? 我应该尝试不同的方法吗?就像让我的java重新保存excel然后开始阅读一样?

2 个答案:

答案 0 :(得分:3)

如果我理解您的问题,您就会尝试像文本文件一样阅读excel文件。

挑战在于.xls文件实际上是包含文本,格式,工作表信息,宏信息等的二进制文件......

您需要将文件保存为.csv(在运行程序之前通过Excel或直接通过程序),将它们升级到.xlsx(它有许多可以将文件读取为XML的库)在那时)或使用库(例如apache POI or anything similar)甚至使用ADO查询数据。

祝你好运,我希望通过你的问题暗示你的意思。

答案 1 :(得分:-1)

代码:

WorkbookSettings workbookSettings = new WorkbookSettings();
WorkbookSettings.setEncoding("Cp1252");