Java 无法在excel文件中使用Apache POI写入连续单元格值
我不知道为什么我不能用setCellValue()写2个单元格值,它只更新x1单元格中的1个值,而x2单元格中不更新。 我有一个excel文件,我想用arraylist ListToHaithang、tt.getNoiBo()和tt.getNgoaiMang()中的数据更新该文件的值。getNgoaiMang()是一个字符串,在记录日志时不为null 代码如下,谢谢Java 无法在excel文件中使用Apache POI写入连续单元格值,java,apache,apache-poi,Java,Apache,Apache Poi,我不知道为什么我不能用setCellValue()写2个单元格值,它只更新x1单元格中的1个值,而x2单元格中不更新。 我有一个excel文件,我想用arraylist ListToHaithang、tt.getNoiBo()和tt.getNgoaiMang()中的数据更新该文件的值。getNgoaiMang()是一个字符串,在记录日志时不为null 代码如下,谢谢 public void writeFile(ArrayList<LLThoaiNoiHat> llList) {
public void writeFile(ArrayList<LLThoaiNoiHat> llList) {
FileInputStream fis = null;
try {
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String date1 = dateFormat.format(new Date()).toString();
File tongHop = new File("Thongke_LL_NOIHAT_VTT_" + date1 + ".xlsx");
copyFileUsingApacheCommonsIO(new File("Mau_Thongke_LL_NOIHAT_VTT.xlsx"), tongHop); //copy sample file before edit data
fis = new FileInputStream(tongHop);
BufferedInputStream bis = new BufferedInputStream(fis);
XSSFWorkbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0);
fis.close();
int rowNum = 9;
Row row;
ArrayList<LLThoaiThang> listThoaiThang;
for (LLThoaiNoiHat tnh : llList) {
row = sheet.getRow(rowNum++);
int colNum = 2;
listThoaiThang =tnh.getListThoaiThang();
for (LLThoaiThang tt :listThoaiThang ) {
int aa = tt.getThang() / 2+3;
Cell x1 = row.getCell(aa);
x1.setCellValue(tt.getNoiBo()); //only first cell ok
Cell x2 = row.getCell(aa+1);
x2.setCellValue(tt.getNgoaiMang());//this cell cannot change value and all cell after cannot change value
}
}
FileOutputStream outFile = new FileOutputStream(tongHop);
workbook.write(outFile);
outFile.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void writeFile(ArrayList llList){
FileInputStream fis=null;
试一试{
DateFormat DateFormat=新的SimpleDateFormat(“yyyyMMdd”);
字符串date1=dateFormat.format(新日期()).toString();
File tongHop=新文件(“Thongke_LL_NOIHAT_VTT_”+date1+”.xlsx);
copyFileUsingApacheCommonsIO(新文件(“Mau_Thongke_LL_NOIHAT_VTT.xlsx”),tongHop);//在编辑数据之前复制示例文件
fis=新文件输入流(tongHop);
BufferedInputStream bis=新的BufferedInputStream(fis);
XSSF工作簿=新XSSF工作簿(fis);
工作表=工作簿。getSheetAt(0);
fis.close();
int rowNum=9;
行行;
ArrayList ListToAithang;
对于(LLThoaiNoiHat tnh:llList){
row=sheet.getRow(rowNum++);
int colNum=2;
listThoaiThang=tnh.getListThoaiThang();
对于(LLThoaiThang tt:LISTTHOAITThang){
int aa=tt.gethang()/2+3;
单元格x1=行getCell(aa);
x1.setCellValue(tt.getNoiBo());//仅第一个单元格正常
单元格x2=行getCell(aa+1);
x2.setCellValue(tt.getNgoaiMang());//此单元格不能更改值,后面的所有单元格都不能更改值
}
}
FileOutputStream outFile=新FileOutputStream(tongHop);
工作簿。写入(输出文件);
outFile.close();
}捕获(例外情况除外){
例如printStackTrace();
}
}
我发现这里的问题是,如果您将数字值设置为字符串,它将不会在单元格后更新,我认为这是apache POI的问题,所以答案是:
for (LLThoaiThang tt :listThoaiThang ) {
int aa = tt.getThang() / 2+3;
Cell x1 = row.getCell(aa);
if(!tt.getNoiBo().isEmpty())
x1.setCellValue(Double.parseDouble(tt.getNoiBo())); //only this cell ok
Cell x2 = row.getCell(aa+1);
if(!tt.getNgoaiMang().isEmpty())
x2.setCellValue(Double.parseDouble(tt.getNgoaiMang()));;
}
欢迎来到堆栈溢出!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。