我不知道为什么我使用POI编写的文件不能由Excel 2013打开,但POI仍然可以读取该文件。 (单元格值可以更改)
this是文件中的错误
这是代码
FileInputStream fis = null;
try {
fis = new FileInputStream(fileUri); //not error at fileUri
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String urii = fileUri.replace(".xls", "0.xls"); //not error
File fisx = new File(urii);
Workbook workbook = null;
workbook = new HSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0);
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
String p = cell.getStringCellValue();
TextView a = (TextView) findViewById(R.id.txtUri);
cell.setCellValue(new String("popo"));
String x = cell.getStringCellValue();
TextView b = (TextView) findViewById(R.id.txtFile);
a.setText(p);
b.setText(x);
OutputStream fos = null;
fos = new FileOutputStream(fisx);
workbook.write(fos); //main problem
fos.flush();
fos.close();
感谢您的帮助!!
答案 0 :(得分:6)
您的代码存在两个问题。首先是:
FileInputStream fis = null;
try {
fis = new FileInputStream(fileUri);
正如Apache POI Docs, don't use an InputStream if you have a File!
中所述其次,这:
Workbook workbook = null;
workbook = new HSSFWorkbook(fis);
这仅适用于.xls
个文件,不适用于.xlsx
个文件。相反,您需要使用WorkbookFactory来标识类型,并为您提供格式正确的工作簿
因此,请将您的代码更改为
File file = new File(fileUri);
Workbook workbook = WorkbookFactory.create(file);
答案 1 :(得分:1)
我在这里看到的主要问题是:
Workbook workbook = null;
workbook = new HSSFWorkbook(fis);
相反,你必须使用:
Workbook workbook = null;
workbook = new XSSFWorkbook(fis);
MS EXCEL 2013可读取。
答案 2 :(得分:0)
解决了:
使用真正的Android设备而不是bluestack模拟器, 我不知道为什么,但它有效!!
谢谢大家:D
答案 3 :(得分:0)
您正在调用getSheetAt(0),但之前没有创建任何工作表(workbook.createSheet(“name”)
答案 4 :(得分:-1)
解决方法是使用.xls扩展名和非.xlsx,如answer
中所述