您好我想创建一个excel文件,我需要从java应用程序添加数据,需要使用java应用程序再次查看这些数据。我使用java jxl库文件来完成它。 我可以打开用MS创建的excel文件excel它打开没有任何问题。但我无法打开我的java应用程序创建的excel文件。因为我认为原因是我的应用程序没有创建excel文件。它只是创建文件“.xls”as扩展。无论如何我都可以在excel中打开文件。
当我打开由我的应用程序创建的文件时,使用ms excel错误发生“文件格式和扩展名不匹配。等等等等。”
但ms无论如何都要打开那个文件。
当我要保存它时,它说“如果你将它保存为文本制表符分隔,你工作簿中的某些功能可能会丢失”
如何解决这个问题
创建xls文件的代码。请帮我完成此代码
try {
WritableWorkbook copy=Workbook.createWorkbook(new File("C:\\Users\\FxMax\\Desktop\\demo.xls"));//create file
WritableSheet Wsheet = copy.getSheet(0); //create sheet
TableModel mode=table.getModel(); //create table model for jtable
String s=mode.getValueAt(0, 0).toString();//get value at 0,0 cell @jtable
copy.write();
copy.close();
} catch (Exception e) {
}
这是用于读取文件的代码
JFileChooser choose = new JFileChooser();
choose.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter fileF = new FileNameExtensionFilter("Excel file", "xls");
choose.setFileFilter(fileF);
int res = choose.showOpenDialog(jFileChooser1);
if (res == JFileChooser.APPROVE_OPTION) {
//File file =choose.getSelectedFile(); //getFile
String filePath = choose.getSelectedFile().getAbsolutePath();//getFilePath
File f = new File(filePath);
//System.out.println(filePath);
Workbook w;
try {
w = Workbook.getWorkbook(f);
Sheet sheet = w.getSheet(0);
for (int i = 1; i < sheet.getRows(); i++) {
String cell0 = sheet.getCell(0, i).getContents();
String cell1 = sheet.getCell(1, i).getContents();
String f1 = sheet.getCell(2, i).getContents();
float cell2 = Float.valueOf(f1);
float cell3 = Float.valueOf(sheet.getCell(3, i).getContents());
Object[] cells = {cell0, cell1, cell2, cell3,};
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.addRow(cells);
}
} catch (Exception e) {
}
} else {
}
}
答案 0 :(得分:2)
如果您使用poi
则更容易。
将poi依赖项添加到pom
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
并像这样使用它:
...
...
int rowNum = 0;
int colNum = 0;
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("sheetname");
Row row = sheet.createRow(rowNum++);
row.createCell(colNum++).setCellValue("your value");
...
...
FileOutputStream fileOut = new FileOutputStream("your excel (xlsx) file name");
workbook.write(fileOut);
fileOut.close;
阅读类似。查看poi
文档。
答案 1 :(得分:1)
Apache POI对我这样工作:
HSSFWorkbook workbook = new HSSFWorkbook();
Iterator<E> iterator = elementList.iterator();
for (int wsNum = 0; wsNum <= (totalNumberOfElements / 65536); wsNum++) {
HSSFSheet worksheet = workbook.createSheet("Name of worksheet " + wsNum);
for (long i = wsNum * 65536; i < ((wsNum + 1) * 65536); i++) {
int ii = ((Long) (i % 65536)).intValue();
if (!iterator.hasNext()) {
break;
}
HSSFRow row = worksheet.createRow(ii);
E e = iterator.next();
for(int columnNum = 0; columnNum < maxColumnNum; columnNum++)
{
HSSFCell cell = row.createCell(columnNum);
cell.setCellValue(e.getProperty(columnNum)); //figure out something smart for this one
}
}
}
for(int columnNum = 0; columnNum < maxColumnNum; columnNum++)
worksheet.autoSizeColumn(columnNum);
}
return workbook;
和
workbook.write(response.getOutputStream()); //it needs a Stream so that can be a FileOutputStream
需要注意的重要一点是,如果要将大量数据导出到Excel文件中,由于原始XLS格式的限制,工作表中总共只能有65536行。