我以某种方式设法在现有excel文件的两行之间创建新行。问题是,随着行的移动,某些格式未包括在内。
其中之一是,在转移过程中,皮的行相对不走。我的意思是(例如),从20到30的行被隐藏,但是当创建新的行时,格式仍然存在。隐藏的行在插入/创建新行时也必须移动,应该为21到31。
另一件事是,工作表中不在单元格中的其他对象。像文本框一样,创建新行后不会随之移动。这些对象的位置固定。但是我希望它移动,就像我在excel中插入新行或粘贴行一样。如果有插入新行的功能,请告诉我。
这就是我现在所拥有的,只是我代码中的一小段。
HSSFWorkbook wb = new HSSFWorkbook(template); //template is the source of file
HSSFSheet sheet = wb.getSheet("SAMPLE");
HSSFRow newRow;
HSSFCell cellData;
int createNewRowAt = 9; //Add the new row between row 9 and 10
sheet.shiftRows(createNewRowAt, sheet.getLastRowNum(), 1, true, false);
newRow = sheet.createRow(createNewRowAt);
newRow = sheet.getRow(createNewRowAt);
如果可以复制和粘贴行,那将有很大帮助。但是我已经在这里问了,找不到解决方案。因此,我决定创建一行作为临时解决方案。我已经完成了,但是有这样的问题。
任何帮助都感激不尽。谢谢!
辅助功能从这里无耻地复制行
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.util.CellRangeAddress;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class RowCopy {
public static void main(String[] args) throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("c:/input.xls"));
HSSFSheet sheet = workbook.getSheet("Sheet1");
copyRow(workbook, sheet, 0, 1);
FileOutputStream out = new FileOutputStream("c:/output.xls");
workbook.write(out);
out.close();
}
private static void copyRow(HSSFWorkbook workbook, HSSFSheet worksheet, int sourceRowNum, int destinationRowNum) {
// Get the source / new row
HSSFRow newRow = worksheet.getRow(destinationRowNum);
HSSFRow sourceRow = worksheet.getRow(sourceRowNum);
// If the row exist in destination, push down all rows by 1 else create a new row
if (newRow != null) {
worksheet.shiftRows(destinationRowNum, worksheet.getLastRowNum(), 1);
} else {
newRow = worksheet.createRow(destinationRowNum);
}
// Loop through source columns to add to new row
for (int i = 0; i < sourceRow.getLastCellNum(); i++) {
// Grab a copy of the old/new cell
HSSFCell oldCell = sourceRow.getCell(i);
HSSFCell newCell = newRow.createCell(i);
// If the old cell is null jump to next cell
if (oldCell == null) {
newCell = null;
continue;
}
// Copy style from old cell and apply to new cell
HSSFCellStyle newCellStyle = workbook.createCellStyle();
newCellStyle.cloneStyleFrom(oldCell.getCellStyle());
;
newCell.setCellStyle(newCellStyle);
// If there is a cell comment, copy
if (oldCell.getCellComment() != null) {
newCell.setCellComment(oldCell.getCellComment());
}
// If there is a cell hyperlink, copy
if (oldCell.getHyperlink() != null) {
newCell.setHyhtml" target="_blank">perlink(oldCell.getHyperlink());
}
// Set the cell data type
newCell.setCellType(oldCell.getCellType());
// Set the cell data value
switch (oldCell.getCellType()) {
case Cell.CELL_TYPE_BLANK:
newCell.setCellValue(oldCell.getStringCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN:
newCell.setCellValue(oldCell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_ERROR:
newCell.setCellErrorValue(oldCell.getErrorCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
newCell.setCellFormula(oldCell.getCellFormula());
break;
case Cell.CELL_TYPE_NUMERIC:
newCell.setCellValue(oldCell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
newCell.setCellValue(oldCell.getRichStringCellValue());
break;
}
}
// If there are are any merged regions in the source row, copy to new row
for (int i = 0; i < worksheet.getNumMergedRegions(); i++) {
CellRangeAddress cellRangeAddress = worksheet.getMergedRegion(i);
if (cellRangeAddress.getFirstRow() == sourceRow.getRowNum()) {
CellRangeAddress newCellRangeAddress = new CellRangeAddress(newRow.getRowNum(),
(newRow.getRowNum() +
(cellRangeAddress.getLastRow() - cellRangeAddress.getFirstRow()
)),
cellRangeAddress.getFirstColumn(),
cellRangeAddress.getLastColumn());
worksheet.addMergedRegion(newCellRangeAddress);
}
}
}
}
我有一个excel文件,其中有2列。我想使用java程序在现有的第一列和第二列之间添加一个新列。为此,我正在尝试使用Apache POI。我浏览了api文档和一些相关的栈溢出问题,但是我可以找到只删除/更新单元格(而不是插入整个列)的例子。 有谁能分享一些有用的线索吗?我现在能想到的唯一解决方案是创建一个新的3列工作表,从旧的工作表中复制第1列和第3列的值
我正在开发一个与Excel表相关的桌面应用程序。我在两行之间插入行时遇到一些问题。在使用ApachePOI的Java中是否有可能这样做?
怎么用代码实现向Excel中插入一列的操作? 比如说往A列和B列中间插入一列,要怎么办?最好是Java
嗨,我想在第一行搜索一个字符串,如果找到了,我想移动那一列。
我插入数据到一个电子表格与新的谷歌工作表API v4,代码完美的工作和数据它是插入良好的工作表。 但是如何找出最后一行有数据来添加后面的数据呢? A1符号中有什么技巧吗? 我需要一个相当于。
批量订单 Purchorder 我已经试了一个星期了。我有这两个表,batchporder和purchord在batchporder表中,我需要插入一行,并获得传递给purchord插入的主id。在purchord中,我需要插入多行,因此我使用了insert\u batch。 控制器 模型 错误1 遇到PHP错误严重性:警告 消息:array_keys()要求参数1为数组,字符串为给定值 文件名: