HSSFSheet sheet = workbook.getSheetAt(0)//获取工作表
HSSFCell cell = sheet.getRow(j).getCell((short) i)
cell.setEncoding(HSSFWorkbook.ENCODING_UTF_16)
cell.setCellType(HSSFCell.CELL_TYPE_STRING)
cell.setCellValue(value)//往单元格放值
i与j分别代表所在的列与行,
可以写一个类似效果的函数:这里用到了NPOI中自带的ShiftRows函数,该函数功能:对指定行移动 *** 作
public void ShiftRows(int startRow, int endRow, int n)
public void ShiftRows(int startRow, int endRow, int n, bool copyRowHeight, bool resetOriginalRowHeight)
public void ShiftRows(int startRow, int endRow, int n, bool copyRowHeight, bool resetOriginalRowHeight, bool moveComments)
思路:
一:先确要从第几行插入----int InsertRowIndex
二:指定要插入多少行----int InsertRowCount
三:指定InsertRowIndex上面那行----HSSFRow mySourceStyleRow,并获取他的格式:
获取InsertRowIndex上面那行的方法:InsertRowIndex-1.
打开一个Workbook 可以用到函数NPOIOpenExcel(string fileName)
获取行:
HSSFSheet mySheet= Workbook.GetSheetAt(Workbook.ActiveSheetIndex)
HSSFRow mySourceStyleRow=mySheet.GetRow(InsertRowIndex-1)
四:对InsertRowIndex那一行开始到最后一行:HSSFSheet类下的属性.LastRowNum(获取最后有效的行数)都批量用ShiftRows函数往下移动InsertRowCount行,这时会在第InsertRowIndex行里,出现了InsertRowCount行空行,这里只要对空行的格式都设置为mySourceStyleRow行的格式的每一个相应的单元格格式即可
这里用到函数 MyInsertRow()即可
示例,假如我要在指定的表的第3行插入3行,可以使用这样写:
int InsertRowIndex=2//指定在第几行插入,我们这里测试用第3行,对应NPOI的索引值2,因为从0起
int InsertRowCount=3//要插入的行数
HSSFWorkbook Workbook=NPOIOpenExcel(@"E:\TEST\MyExcelTestFile.xls")//打开工作薄
HSSFSheet mySheet= Workbook.GetSheetAt(Workbook.ActiveSheetIndex)//获取工作表
HSSFRow mySourceStyleRow=mySheet.GetRow(InsertRowIndex-1)//获取源格式行
//调用插入行方法
MyInsertRow(mySheet,InsertRowIndex,InsertRowCount,mySourceStyleRow)
//参数说明
//第一个:指定 *** 作的Sheet。
//第二个:指定在第几行指入(插入行的位置)
//第三个:指定要插入多少行
//第四个:源单元格格式的行,
函数部分:
public HSSFWorkbook NPOIOpenExcel(string FileName)
{
HSSFWorkbook MyHSSFWorkBook
Stream MyExcelStream = OpenClasspathResource(FileName)
MyHSSFWorkBook = new HSSFWorkbook(MyExcelStream)
return MyHSSFWorkBook
}
private void MyInsertRow(HSSFSheet sheet, int 插入行, int 插入行总数, HSSFRow 源格式行)
{
#region 批量移动行
sheet
.ShiftRows
(
插入行, //--开始行
sheet
.LastRowNum,//--结束行
插入行总数, //--移动大小(行数)--往下移动
true, //是否复制行高
false, //是否重置行高
true//是否移动批注
)
#endregion
#region 对批量移动后空出的空行插,创建相应的行,并以插入行的上一行为格式源(即:插入行-1的那一行)
for (int i = 插入行i <插入行 + 插入行总数 - 1i++)
{
HSSFRow targetRow = null
HSSFCell sourceCell = null
HSSFCell targetCell = null
targetRow = sheet.CreateRow(i + 1)
for (int m = 源格式行.FirstCellNumm <源格式行.LastCellNumm++)
{
sourceCell = 源格式行.GetCell(m)
if (sourceCell == null)
continue
targetCell = targetRow.CreateCell(m)
targetCell.Encoding = sourceCell.Encoding
targetCell.CellStyle = sourceCell.CellStyle
targetCell.SetCellType(sourceCell.CellType)
}
//CopyRow(sourceRow, targetRow)
//Util.CopyRow(sheet, sourceRow, targetRow)
}
HSSFRow firstTargetRow = sheet.GetRow(插入行)
HSSFCell firstSourceCell = null
HSSFCell firstTargetCell = null
for (int m = 源格式行.FirstCellNumm <源格式行.LastCellNumm++)
{
firstSourceCell = 源格式行.GetCell(m)
if (firstSourceCell == null)
continue
firstTargetCell = firstTargetRow.CreateCell(m)
firstTargetCell.Encoding = firstSourceCell.Encoding
firstTargetCell.CellStyle = firstSourceCell.CellStyle
firstTargetCell.SetCellType(firstSourceCell.CellType)
}
#endregion
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)