【问题标题】:JExcel - Modify Multiple Cells Before Closing WritableWorkbookJExcel - 在关闭 WritableWorkbook 之前修改多个单元格
【发布时间】:2019-01-02 20:01:13
【问题描述】:

我试图在单元格 (0,0) 中放置一个标题,然后使用for() 循环将文件路径添加到接下来的每一行。但是,我只能添加一行代码;在标题之后,Excel 文档中没有其他单元格被修改。

这里是我创建文件的地方:

private void chooseSheetActionPerformed(java.awt.event.ActionEvent evt) {                                            
        sheetNum = chooseSheet.getSelectedIndex() - 1;
        try {
            WritableWorkbook workbook = Workbook.createWorkbook(newXls);
            workbook.createSheet("Sheet1", 0);
            workbook.write();
            workbook.close();

            writeXls();
        } catch (Exception ex) {
            Logger.getLogger(NewScore.class.getName()).log(Level.SEVERE, null, ex);
        }
    }  

这是我尝试写信的地方:

public void writeXls() throws Exception {
    Workbook wb = Workbook.getWorkbook(newXls);
    WritableWorkbook copy = Workbook.createWorkbook(newXls, wb);
    WritableSheet ws = copy.getSheet(sheetNum);
    WritableCell cell;

    // Body Part - Title
    Label lab = new Label(0,0,partName);
    cell = (WritableCell) lab;
    ws.addCell(cell);
    copy.write();
    // Image Info
    int i = 1;
    for (File file : imageArray(dir)) {
        Label label = new Label (0,i,"test" + i);
        cell = label;
        ws.addCell(cell);
        copy.write();
        i++;
    }
    copy.close();
}

有没有办法让我的for() 循环工作,或者我需要以不同的方式解决这个问题?

谢谢!

【问题讨论】:

  • 嗨!您是否检查过 imageArray(dir) 是否返回任何数据?此外,您正在向一个对象添加单元格,但在另一个对象上调用 write 和 close,这看起来有点奇怪。不应该调用一个对象吗?
  • 嗨波格丹!是的,imageArray(dir) 中存储了五个文件。至于添加单元格和调用 WritableWorkbooks,我正在尝试将我的代码基于这篇文章:stackoverflow.com/questions/3605923/…

标签: java excel for-loop jexcelapi


【解决方案1】:

好的。最初,我对您是尝试创建新工作簿还是编辑现有工作簿感到困惑。但看起来你需要一个新的。

代码示例中似乎存在两个问题。 第一个是您检索了刚刚创建的 excel 文件并将其内容复制到自身中。

Workbook wb = Workbook.getWorkbook(newXls);
WritableWorkbook copy = Workbook.createWorkbook(newXls, wb);

我注意到的另一件事是,为了保存所有更改,最后只需要在 WritableWorkbook 实例上调用一次 write。

我完成了这样的代码。

private static final String FILE_NAME = "D:/test_out.xls";
private static final String SHEET_NAME = "Test sheet name";
private static final int SHEET_INDEX = 0;
private static final String HEADER = "My header";

public static void main(String[] args) throws Exception {
    WritableWorkbook writableWorkbook = Workbook.createWorkbook(new File(FILE_NAME));
    WritableSheet writableSheet = writableWorkbook.createSheet(SHEET_NAME, SHEET_INDEX);

    int columnIndex = 0;
    int rowIndex = 0;

    writableSheet.addCell(new Label(columnIndex, rowIndex, HEADER));

    for (String value : Arrays.asList("First value", "Second value", "Another value")) {
        writableSheet.addCell(new Label (columnIndex, ++rowIndex, value));
    }

    writableWorkbook.write();
    writableWorkbook.close();
}

它为我创建了一个带有一张表的 excel 文件。该工作表包含一个包含 4 个单元格的列:我的标题、第一个值、第二个值、另一个值。当然,你可以随意放任何你需要的值:)

【讨论】:

  • 完美运行!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多