如何编写excel文件

时间:2014-09-15 07:55:12

标签: java excel

您好我想创建一个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 {

    }

}                                    

2 个答案:

答案 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行。