gpt4 book ai didi

java - 使用 JExcelApi 导入工作表

转载 作者:行者123 更新时间:2023-12-01 17:32:27 25 4
gpt4 key购买 nike

首先我要说的是,我对 Java 和这个网站都很陌生。我现在已经读了一两本书,从那时起我就一直在寻找小项目来让自己开心。我尝试对此进行研究,但无法找到我需要的信息。话虽如此,这是我的第一个问题,所以如果这是非常早期的初学者内容并且我遗漏了一些明显的东西,我深表歉意。

关于该项目,我的姐夫在工作中遇到了一个问题,他的一个文件夹中有 90 个左右的 Excel 工作簿,他需要将每个报告的第一个工作表合并到一个主工作簿中。他可以手动完成,但我认为尝试找出一种用 Java 完成的方法会很有趣。

我做了一些研究并下载了 JExcelAPI 并将 .jar 添加到我的类路径中。我在计算机上创建了两个目录。

C:\Excel\

C:\Excel\已完成\

在 C:\Excel\中,我创建了两个虚拟 Excel 工作表。出于测试目的,我已重命名每个表的第一张表。在完成的文件夹中,我创建了主文档,我打算将这些工作表合并到其中。当工作表为空并且我运行此操作时,工作表似乎被复制了。主文件中有两张表,它们的名称与我在各自工作簿中指定的名称相对应,因此我认为这是有效的。但是,当我将信息添加到其中一张表并尝试运行它时,我收到空指针异常。我已经为此工作了几个小时,所以也许我只是需要休息一下,但我不知道出了什么问题。我访问了 JExcelAPI 网站,尝试了一种看起来过时的方法(在 importSheet() 存在之前)。这也不起作用,并且还返回了空指针异常。

如果有人有时间并且熟悉 JExcelAPI,您能让我知道出了什么问题吗?我真的很感激。我已在下面发布了错误和我的代码。

--错误--

spreadsheet1.xls
Exception in thread "main" java.lang.NullPointerException
at jxl.write.biff.SheetCopier.deepCopyCells(SheetCopier.java:996)
at jxl.write.biff.SheetCopier.importSheet(SheetCopier.java:542)
at jxl.write.biff.WritableSheetImpl.importSheet(WritableSheetImpl.java:2699)
at jxl.write.biff.WritableWorkbookImpl.importSheet(WritableWorkbookImpl.java:1897)
at sheetcopier.SheetCopier.main(SheetCopier.java:32)

--代码--

package sheetcopier;

import java.io.File;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.NotDirectoryException;
import java.nio.file.Path;
import java.nio.file.Paths;
import jxl.*;
import jxl.read.biff.BiffException;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

public class SheetCopier {

public static void main(String[] args) throws WriteException, BiffException {
Path inputpath = Paths.get("C:/Excel"); //Directory with excel documents to be copied
File outputfile = new File("C:/ExcelFinished/finishedbook.xls"); //Master/End file

//Read all files from directory
try (DirectoryStream<Path> inputfiles = Files.newDirectoryStream(inputpath)){

//Get a writable workbook
WritableWorkbook writableworkbook = Workbook.createWorkbook(outputfile);

for(Path path: inputfiles)
{
Workbook sourceworkbook = Workbook.getWorkbook(path.toFile()); //Get the source workbook
System.out.println(path.getFileName()); //Print workbook being processed
Sheet readablesheet = sourceworkbook.getSheet(0); //Get the first sheet
writableworkbook.importSheet(readablesheet.getName(), 0, readablesheet); //Import the sheet into the new workbook
//Sheet names are imported if sheets are empty. If sheets are populated I get a null pointer error.
}

writableworkbook.write();
writableworkbook.close();
}
catch(NotDirectoryException e) {
System.err.println(inputpath + " is not a directory." + e);
}
catch(IOException e) {
System.err.println("I/O error." + e);
}
}
}

最佳答案

这是 jxl-2.6.12.jar 中的错误,请使用 jxl-2.6.10.jar 代替。

详细信息:

将“&&”错字改为“&”

WritableSheetCopier.java 中的第 493 行 - 第 504 行

if (c != null)
{
toSheet.addCell(c);

// Cell.setCellFeatures short circuits when the cell is copied,
// so make sure the copy logic handles the validated cells
if (c.getCellFeatures() != null &
c.getCellFeatures().hasDataValidation())
{
validatedCells.add(c);
}
}

WritableSheetCopier.java 中的第 540 行 - 第 551 行

if (c != null)
{
toSheet.addCell(c);

// Cell.setCellFeatures short circuits when the cell is copied,
// so make sure the copy logic handles the validated cells
if (c.getCellFeatures() != null &
c.getCellFeatures().hasDataValidation())
{
validatedCells.add(c);
}
}

SheetCopier.java 中的第 990 行 - 第 1001 行

if (c != null)
{
toSheet.addCell(c);

// Cell.setCellFeatures short circuits when the cell is copied,
// so make sure the copy logic handles the validated cells
if (c.getCellFeatures() != null &
c.getCellFeatures().hasDataValidation())
{
validatedCells.add(c);
}
}

关于java - 使用 JExcelApi 导入工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9674388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com