gpt4 book ai didi

java - 在 Excel 中查找合并的单元格,拆分单元格并将其写入新电子表格?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:30 31 4
gpt4 key购买 nike

我收到了一项作业,我需要拆分电子表格的数据并将其写入新的电子表格。条件是,给定的电子表格可能有多个合并的单元格,我需要找到那些合并的单元格并将这些数据写入新的电子表格。即,一个合并单元格到另一个合并单元格之间的数据或单元格必须写入另一个电子表格。

我的努力准则如下,

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


public class CopyTest {

public static void main(String[] args) throws IOException {
CopyTest excel = new CopyTest();
excel.process("D:\\B3.xls");
}

public void process(String fileName) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName));
HSSFWorkbook workbook = new HSSFWorkbook(bis);
HSSFWorkbook myWorkBook = new HSSFWorkbook();
HSSFSheet sheet = null;
HSSFRow row = null;
HSSFCell cell = null;
HSSFSheet mySheet = null;
HSSFRow myRow = null;
HSSFCell myCell = null;
int sheets = workbook.getNumberOfSheets();
int fCell = 0;
int lCell = 0;
int fRow = 0;
int lRow = 0;

for (int iSheet = 0; iSheet < sheets; iSheet++) {
sheet = workbook.getSheetAt(iSheet);
if (sheet != null) {
mySheet = myWorkBook.createSheet(sheet.getSheetName());

fRow = sheet.getFirstRowNum();
System.out.println("First Row at"+fRow);
lRow = sheet.getLastRowNum();
for (int iRow = fRow; iRow <= lRow; iRow++) {
row = sheet.getRow(iRow);
myRow = mySheet.createRow(iRow);



if (row != null) {
fCell = row.getFirstCellNum();
lCell = row.getLastCellNum();
for (int iCell = fCell; iCell < lCell; iCell++) {
//if (mySheet.getMergedRegionAt(index)!=null)
System.out.println("Finding next merged Cells");
cell = row.getCell(iCell);
myCell = myRow.createCell(iCell);
if (cell != null) {
myCell.setCellType(cell.getCellType());

switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_BLANK:
myCell.setCellValue("");
break;

case HSSFCell.CELL_TYPE_BOOLEAN:
myCell.setCellValue(cell.getBooleanCellValue());
break;

case HSSFCell.CELL_TYPE_ERROR:
myCell.setCellErrorValue(cell.getErrorCellValue());
break;

case HSSFCell.CELL_TYPE_FORMULA:
myCell.setCellFormula(cell.getCellFormula());
break;

case HSSFCell.CELL_TYPE_NUMERIC:
myCell.setCellValue(cell.getNumericCellValue());
break;

case HSSFCell.CELL_TYPE_STRING:
myCell.setCellValue(cell.getStringCellValue());
break;
default:
myCell.setCellFormula(cell.getCellFormula());
// System.out.println("Reading Cell value\t"+myCell);
}System.out.println("Reading Cell value\t"+myCell);
}
}
}
}
}

}

bis.close();
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream("D:\\Result Excel1.xls", true));
myWorkBook.write(bos);
bos.close();

}}

使用此代码,我已经实现了将电子表格克隆到另一个新工作表中。在这里,我找不到合并的单元格,getMergedCellRegionAt() 帮助我并返回像 A:4 D:12 这样的合并单元格区域。我该怎么做。请帮助我,感谢您的小努力。提前致谢。

最佳答案

根据Javadocs for HSSFSheet , getMergedCellRegionAt() 在 2008 年被弃用,因为它返回的 Region 也被弃用,取而代之的是 CellRangeAddress。它建议您应该使用 getMergedRegion(int)相反,它返回一个 CellRangeAddress

合并后的区域数据并不直接存储在单元格本身中,而是存储在 Sheet 对象中。因此,您无需遍历行和单元格来查找它们是否属于合并区域;您只需要遍历工作表上的合并区域列表,然后使用 addMergedRegion(CellRangeAddress) 将合并区域添加到新工作表中.

for (int i = 0; i < sheet.getNumMergedRegions(); i++)
{
CellRangeAddress mergedRegion = sheet.getMergedRegion(i);
// Just add it to the sheet on the new workbook.
mySheet.addMergedRegion(mergedRegion);
}

HSSFSheet 上的这些方法在 Sheet 中接口(interface),因此它们可以使用 Apache POI 支持的任何 Excel 工作簿,.xls (HSSF) 或 .xlsx (XSSF)。

关于java - 在 Excel 中查找合并的单元格,拆分单元格并将其写入新电子表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18529467/

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