JAVA POI无法理解工作簿克隆表方法,因为我什么都没得到

时间:2014-03-17 14:32:26

标签: excel apache-poi

我的工作簿中只有一张工作表需要从现有工作表中创建2张新工作表。我首先使用工作簿创建表方法创建新工作表,然后使用克隆表单方法克隆它。但是从工作表中获取数据时,我只从现有工作表中获取数据,而不是从新创建的工作表中获取数据。我的理解是克隆表法的错误。它不会将现有工作表中的数据提供给新工作表。

XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);\\existing sheet
XSSFSheet newSheet = workbook.createSheet("NewSheet");\\created new sheet
XSSFSheet newSheet1 = workbook.createSheet("NewSheet2");\\created new sheet
newSheet = workbook.cloneSheet(1);\\clone sheet from existing sheet
newSheet1 = workbook.cloneSheet(1);\\clone sheet from existing sheet

for(int sheetNum=0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) {
    // while iterating data I am getting records only for existing sheet
    // newSheet and newSheet1 is coming empty.
}

任何帮助都会得到满足。

谢谢, 阿米特

2 个答案:

答案 0 :(得分:3)

首先,引用您的代码片段“workbook.sheet(1)”不存在,即您要克隆的工作表。所以,假设您要克隆“workbook.sheet(0)”。因此,您需要更改:

newSheet = workbook.cloneSheet(1);\\clone sheet from existing sheet
newSheet1 = workbook.cloneSheet(1);\\clone sheet from existing sheet

newSheet = workbook.cloneSheet(0);\\clone sheet from existing sheet
newSheet1 = workbook.cloneSheet(0);\\clone sheet from existing sheet

如果要克隆第一张纸。如果没有,请确保您创建另一个工作表并更改该值。

然后,是否

a)将其另存为新文件

FileOutputStream out = new FileOutputStream(new File("<full path where you want to save it>"));) 
workbook.write(out);

b)将其保存到当前文件

只需使用此代码段,它就可以在同一工作簿中自动创建新工作表,并使用与之前克隆的工作表相同的数据。

xSSFSheet newsheet = workbook.cloneSheet(0);

并保存。祝你好运! (对不起,如果这不符合您的要求)。

答案 1 :(得分:0)

即使您获得正确的工作表索引,您的代码也会遇到另一个问题:

    XSSFSheet newSheet = workbook.createSheet("NewSheet");\\created new sheet
    XSSFSheet newSheet1 = workbook.createSheet("NewSheet2");\\created new sheet
    newSheet = workbook.cloneSheet(1);\\clone sheet from existing sheet
    newSheet1 = workbook.cloneSheet(1);\\clone sheet from existing sheet

您在最后两行中所做的实际上是重置newSheet和newSheet1的引用。在赋值之后,它们引用其他对象,并且在前两行中创建的那些工作表中将不会观察到克隆。