使用NPOI动态创建Excel模板

时间:2016-08-29 18:40:24

标签: c# excel templates npoi

我有一个Excel .xlsx模板文件,我需要动态调整以满足我的需求。它现在只包含标题行,其中两列是"占位符"我需要插入新列以满足我的需求的列。

标题行可能如下所示:

FirstName | LastName | City | #Modules# | Remarks | #Experts# | Country | Phone

#的两列是"占位符"值 - 根据我从数据库获得的一些数据,我需要用多列替换那些单列 - 例如将#Modules#替换为标题为M1M2M3的三列,并将#Experts#替换为Expert 1Expert 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;
}

但是在这种情况下,单元格实际上似乎没有插入,我的标题行根本没有变化,只是保持原样。

任何想法?非营利组织的文件有点......缺乏,至少可以说......

谢谢!

0 个答案:

没有答案