我有一个Excel .xlsx
模板文件,我需要动态调整以满足我的需求。它现在只包含标题行,其中两列是"占位符"我需要插入新列以满足我的需求的列。
标题行可能如下所示:
FirstName | LastName | City | #Modules# | Remarks | #Experts# | Country | Phone
#
的两列是"占位符"值 - 根据我从数据库获得的一些数据,我需要用多列替换那些单列 - 例如将#Modules#
替换为标题为M1
,M2
和M3
的三列,并将#Experts#
替换为Expert 1
和Expert 2
- 所以最后,我的Excel应该是这样的:
FirstName | LastName | City | M1 | M2 | M3 | Remarks | Expert 1 | Expert 2 | Country | Phone
我试图通过NPOI v2.2实现这一目标,但尚未成功。
方法#1:我尝试使用IRow.CreateCell
调用,但这似乎是覆盖现有列,所以当我找到#Modules#
并将其替换为我的实际模块时数据,我最终
FirstName | LastName | City | M1 | M2 | M3 | Country | Phone
我的专家占位符已经消失(由其中一个具体模块覆盖)。
代码:
XSSFWorkbook templateWorkbook = new XSSFWorkbook(templateFileName);
ISheet sheet = templateWorkbook.GetSheetAt(0);
IRow firstRow = sheet.GetRow(0); // title row
// find the #Modules# placeholder - works as expected
ICell cellModule = firstRow.Cells.Find(x => x.StringCellValue == "#Modules#");
int moduleIndex = cellModule.ColumnIndex;
List<string> listOfModule = new List<string>(new[] { "M1", "M2", "M3" });
foreach (string module in listOfModule)
{
ICell newCell = firstRow.CreateCell(moduleIndex, CellType.String);
newCell.SetCellValue(module);
moduleIndex += 1;
}
这将覆盖标题行中的现有单元格,从而“#34; destroys&#34;我模板文件的一部分.....
方法#2:我尝试使用.Insert()
方法插入单元格:
foreach (string module in listOfModule)
{
// create a new cell, set its value
ICell newCell = new XSSFCell(firstRow as XSSFRow, new CT_Cell());
newCell.SetCellValue(module);
// insert new cell into title row
firstRow.Cells.Insert(moduleIndex, newCell);
moduleIndex += 1;
}
但是在这种情况下,单元格实际上似乎没有插入,我的标题行根本没有变化,只是保持原样。
任何想法?非营利组织的文件有点......缺乏,至少可以说......
谢谢!