繁体   English   中英

如何写一个Excel文件

[英]How to write a excel file

嗨,我想创建一个Excel文件,我需要从Java应用程序中添加数据,并需要使用Java应用程序再次查看这些数据。我使用了Java jxl库文件来做到这一点。 我可以打开用MS创建的excel文件excel,它可以打开,没有任何问题。但是我无法打开由我的java应用程序创建的excel文件。因为我认为原因是我的应用程序没有创建excel文件。它只是使用“ .xls”创建文件我可以在excel中打开文件。

当我打开由我的应用程序创建的文件时,使用ms excel错误发生“文件格式和扩展名不匹配。等等”

但是ms excel还是会打开该文件。

当我要保存它时,它说:“如果将其保存为文本标签定界符,则工作簿中的某些功能可能会丢失”

如何解决这个问题

创建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 {

    }

}                                    

如果使用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文档。

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

需要注意的重要一点是,由于原始XLS格式的限制,如果要将大量数据导出到Excel文件中,则工作表中总共只能有65536行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM