我当前正在使用vscode和apache poi,创建了一个程序来自动创建.xlsx
程序,并让A1单元格输入了一个名为“ Tester”的字符串,并且弹出该错误。
我程序中的代码:
package excel_reader;
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelWriter {
public static void main (String[] args) throws Exception {
//ExcelReader eR = new ExcelReader();
XSSFWorkbook workbook = new XSSFWorkbook(); // here is the7 line 13
// first sheet create
XSSFSheet sheet = workbook.createSheet("FirstExcelSheet");
// first row create - A
XSSFRow row = sheet.createRow(0);
// first cell create - 1
XSSFCell cell = row.createCell(0); // A-1
// give data into A-1 cell
cell.setCellValue("Tester");
// Output as an excel file
workbook.write(new FileOutputStream("C:\\Users\\Sonic\\Desktop\\book.xlsx"));
workbook.close();
// C:\\Users\\Sonic\\Desktop\\book.xlsx
}
}
错误代码:
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Try the new cross-platform PowerShell aka.ms/pscore6
PS E:\excel_reader_v.1_beta1-0> cd 'e:\excel_reader_v.1_beta1-0'; & 'C:\Users\Sonic\.vscode\extensions\vscjava.vscode-java-debug-0.24.0\scripts\launcher.bat' 'C:\Users\Sonic\AppData\Local\Programs\AdoptOpenJDK\bin\java' '-Dfile.encoding=UTF-8' '-cp' 'C:\Users\Sonic\AppData\Local\Temp\cp_5wuvlu562pjj6rfd2pconxvl4.jar' 'excel_reader.ExcelWriter'
Exception in thread "main" java.lang.NoSuchFieldError: DEFAULT
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:161)
at excel_reader.ExcelWriter.main(ExcelWriter.java:13)
pom.xml(dependency
):
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.1.0</version>
</dependency>
Apache POI对我来说是新手,请帮助我,我将非常感谢,非常感谢。
java.lang.NoSuchFieldError
如果在StackOverflow中搜索标签nosuchfieldexception,您会发现很多类似的问题。他们中的大多数有两个共同点:
此版本不匹配也可能导致您的错误:
java.lang.NoSuchFieldError:默认
由于DEFAULT
class 的常量org.apache.poi.ss.formula.udf.UDFFinder
在3.17之前的版本中存在,但现在(版本4.0和更高版本)已被弃用。意味着它在4.0及更高版本中不存在。
运行时出现问题:如果new XSSFWorkbook();
使用依赖项(JAR)执行语句(第13行)poi-ooxml
,则它使用UDFFinder
核心依赖项(JAR)的a poi
,因此尝试查找CONSTANT字段DEFAULT
(由于版本不匹配,该字段可能不存在)。
因此,我想您的Apache版本poi
与poi-ooxml
并不匹配(不是同一级别)。使用Apache Poi看到版本不匹配的类似问题。
如果您使用的是Maven,请确保您对POM具有以下依赖关系:
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
至少两个版本必须相同!
如果要手动管理类路径和JAR,请注意所有apache-poi JAR文件的文件名,并确保版本相同。
如果您只想将新创建的Excel-Workbook写入文件,例如/tmp/MyFirstExcel.xlsx
(在Linux上)或C:/Users/Sonic/MyFirstExcel.xlsx
(在Windows上,假设您的Windows用户是Sonic
),则使用以下代码:
public class ExcelWriter {
static final String FILE_PATH_LINUX = "/tmp/MyFirstExcel.xlsx";
static final String FILE_PATH_WIN = "C:/Users/Sonic/MyFirstExcel.xlsx"; // note: replace Window's backslash '\' by either double-backslash '\\' or single forward-slash '/'
public static void main(String[] args) throws FileNotFoundException, IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("FirstExcelSheet"); // first sheet create
XSSFRow row = sheet.createRow(0); // first row create - A
XSSFCell cell = row.createCell(0); // first cell create - A-1
cell.setCellValue("Tester"); // give data into A-1 cell
// Output as an excel file
workbook.write(new FileOutputStream(FILE_PATH_WIN));
workbook.close();
}
}
类的用法不清楚ExcelReader
:没有明显的理由可以从ExcelReader
。因此,为了简单起见,您可以省略extends ExcelReader
,声明ExcelReader eR = new ExcelReader();
和用法eR.getImpoFileLink()
来获取文件路径。否则,请将class的源代码发布ExcelReader
到您的问题中,以使其成为最小的可复制示例。
最小的工作解决方案(上述)说明:相反,只需将文件路径放入所需的文件夹和文件,如此处的常量FILE_PATH_WIN
。几个小时前,我看到了您的相关问题,您在哪里做了。
假设您在此处解决了其他问题,并在此处解决了具有POI依赖项的版本不匹配的问题,则上面给出的解决方案应编译并用表格FirstExcelSheet
和A1
包含string的单元格写出所需的Excel工作簿(.xlsx)Tester
。
请参阅有关Apache POI的本教程-用Java读写Excel文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句