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