我的工作簿中只有一张工作表需要从现有工作表中创建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.
}
任何帮助都会得到满足。
谢谢, 阿米特
答案 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的引用。在赋值之后,它们引用其他对象,并且在前两行中创建的那些工作表中将不会观察到克隆。