Excel 无效的头签名;读取0x54535543092E4F4E,应为0xE11AB1A1E011CFD0-您的文件似乎不是有效的OLE2文档

Excel 无效的头签名;读取0x54535543092E4F4E,应为0xE11AB1A1E011CFD0-您的文件似乎不是有效的OLE2文档,excel,csv,apache-poi,Excel,Csv,Apache Poi,好的,我在做了这么多研究之后发布了这篇文章,所有有类似问题的主题都没有回答我的问题。我收到一个.xls文件来处理它。当我用poi读取文件时,我无法更改其版本。我有一个非常奇怪的行为,它无法读取原始文件:无效的头签名;读取0x54535543092E4F4E,应为0xE11AB1A1E011CFD0-您的文件似乎不是有效的OLE2文档 但是当我打开它并将其保存为.xls文件时,它就工作了!!!这是相同版本的同一文件,只有一个是原始下载文件,另一个是手动保存的!!谁能给我解释一下,我必须使用原始的e

好的,我在做了这么多研究之后发布了这篇文章,所有有类似问题的主题都没有回答我的问题。我收到一个.xls文件来处理它。当我用poi读取文件时,我无法更改其版本。我有一个非常奇怪的行为,它无法读取原始文件:无效的头签名;读取0x54535543092E4F4E,应为0xE11AB1A1E011CFD0-您的文件似乎不是有效的OLE2文档 但是当我打开它并将其保存为.xls文件时,它就工作了!!!这是相同版本的同一文件,只有一个是原始下载文件,另一个是手动保存的!!谁能给我解释一下,我必须使用原始的excel文件

File xlsFile = new File(path);
FileInputStream fis = new FileInputStream(path);
 Workbook workbook = new HSSFWorkbook(fis);

该签名看起来像是制表符分隔数据的开始,反之亦然:

不,卡斯特

其中表示实际的制表符


如果是制表符分隔的数据,Apache POI将无法直接使用它。

该签名看起来像是制表符分隔数据的开始,反之亦然:

不,卡斯特

其中表示实际的制表符


如果是制表符分隔的数据,Apache POI将无法直接使用它。

因此,伙计们,我终于找到了最好的解决方案,我想可以使用openCSV库从制表符分隔的文件中读取和导入数据,而且对于所有类型的CSV文件,都可以使用带标题的字符分隔值,我们只需更改分隔符。代码如下:

            File xlsFile = new File(path);
            CSVReader reader = new CSVReader(new FileReader(xlsFile), '\t');
            ArrayList<String[]> data = new ArrayList<String[]>();
            String[] nextLine;
            while ((nextLine = reader.readNext()) != null) {
                final int size = nextLine.length;
                //handle empty lines
                if (size == 0) {
                    continue;
                }

                String debut = nextLine[0].trim();
                if (debut.length() == 0 && size == 1) {
                    continue;
                }
                data.add(nextLine);
            }

            String[] titles = data.get(0);
            data.remove(0);

            ArrayList<Map<String, String>> mappedData = new 
            ArrayList<Map<String, String>>(data.size());

            final int titlesLength = titles.length;

            for (String[] oneData : data) {
              final Map<String, String> map = new HashMap<String, String ();
                for (int i = 0; i < titlesLength; i++) {
                    final String key = titles[i];
                    final String value = oneData[i];
                    map.put(key, value);
                }

                mappedData.add(map);
            }

然后我们必须根据mappedData的键名或列名从mappedData中获取值,在我的例子中

,所以伙计们,我终于找到了最好的解决方案,我想可以使用openCSV库从我的Tab分隔文件中读取和导入数据,这适用于所有类型的CSV文件字符分隔值和标题,我们只需更换分离器。代码如下:

            File xlsFile = new File(path);
            CSVReader reader = new CSVReader(new FileReader(xlsFile), '\t');
            ArrayList<String[]> data = new ArrayList<String[]>();
            String[] nextLine;
            while ((nextLine = reader.readNext()) != null) {
                final int size = nextLine.length;
                //handle empty lines
                if (size == 0) {
                    continue;
                }

                String debut = nextLine[0].trim();
                if (debut.length() == 0 && size == 1) {
                    continue;
                }
                data.add(nextLine);
            }

            String[] titles = data.get(0);
            data.remove(0);

            ArrayList<Map<String, String>> mappedData = new 
            ArrayList<Map<String, String>>(data.size());

            final int titlesLength = titles.length;

            for (String[] oneData : data) {
              final Map<String, String> map = new HashMap<String, String ();
                for (int i = 0; i < titlesLength; i++) {
                    final String key = titles[i];
                    final String value = oneData[i];
                    map.put(key, value);
                }

                mappedData.add(map);
            }

然后我们必须根据mappedData的键名或列名从中获取值,在我的例子中

如何使用POI读取文件?显示代码。'File xlsFile=新文件路径;FileInputStream fis=新的FileInputStreampath;工作簿=新的HSSFWorkbookfis;'使用编辑按钮并在问题中编写代码。如何使用POI读取文件?显示代码。'File xlsFile=新文件路径;FileInputStream fis=新的FileInputStreampath;工作簿=新的HSSFWorkbookfis;'使用编辑按钮并在问题中写入代码。是的,这是真的,当我第一次打开它时,它被保存为选项卡分隔的数据!那么它是否像csv一样,但用制表符而不是逗号分隔?此外,它有列和行,我必须按列名称导入数据。是的,这是真的,当我第一次打开它时,它被保存为制表符分隔的数据!那么,它是否像csv一样,但用制表符而不是逗号分隔?此外,它有列和行,我必须按列名称导入数据。