比如需导出如下形式的报表:
里面数据字段分类很多,又含公式统计等情况。
解决方案:利用NPOI组件,制作导出模板,对单元格精确控制,通过读取单元格里的模板字段,进行数据匹配替换;模板形式如下:
核心方法:
/// <summary>
/// 根据Excel模板单元格内容,找出单元格,并设置单元格的值
/// </summary>
/// <param name="sheet">ExcelSheet</param>
/// <param name="rowIndex">行索引</param>
/// <param name="cellTemplateValue">模板内容</param>
/// <param name="cellFillValue">单元格值</param>
/// <param name="conNextRow">是否承接下一行,即:填充下一行单元格模板内容</param>
public static void SetCellValueByTemplateStr(HSSFSheet sheet, int rowIndex, string cellTemplateValue, object cellFillValue, bool conNextRow = true)
{
int cellStartIndex = sheet.GetRow(rowIndex).FirstCellNum;
int cellEndIndex = sheet.GetRow(rowIndex).LastCellNum;
bool find = false;
for (int i = cellStartIndex; i < cellEndIndex; i++)
{
if (find)
break;
else
if (i < (cellEndIndex - cellStartIndex) / 2)
{
#region 折半查找:前半段
for (int j = i; j < (cellEndIndex - cellStartIndex) / 2; j++)
{
if (find)
break;
else
{
HSSFCell cell = sheet.GetRow(rowIndex).GetCell(j);
if (cell != null)
{
if (cell.CellType == 1)
{
string strCellValue = sheet.GetRow(rowIndex).GetCell(j).StringCellValue;
if (string.Compare(strCellValue, cellTemplateValue, true) == 0)
{
find = true;
Type type = cellFillValue.GetType();
switch (type.ToString())
{
case "System.String":
string strValue = cellFillValue.ToString();
sheet.GetRow(rowIndex).GetCell(j).SetCellValue(strValue);
break;
case "System.Int32":
int intValue = Convert.ToInt32(cellFillValue.ToString());
sheet.GetRow(rowIndex).GetCell(j).SetCellValue(intValue);
break;
case "System.Decimal":
double decimalValue = Convert.ToDouble(cellFillValue.ToString());
sheet.GetRow(rowIndex).GetCell(j).SetCellValue(decimalValue);
break;
}
if (conNextRow)//如果承接下一行,则设置下一行单元格里的模板内容
{
sheet.GetRow(rowIndex + 1).GetCell(j).SetCellValue(cellTemplateValue);
sheet.GetRow(rowIndex + 1).GetCell(j).SetCellType(1);
}
}
}
}
}
}
#endregion
}
else
{
#region 折半查找:后半段
for (int j = (cellEndIndex - cellStartIndex) / 2; j < cellEndIndex; j++)
{
if (find)
break;
else
{
HSSFCell cell = sheet.GetRow(rowIndex).GetCell(j);
if (cell != null)
{
if (cell.CellType == 1)
{
string strCellValue = sheet.GetRow(rowIndex).GetCell(j).StringCellValue;
if (string.Compare(strCellValue, cellTemplateValue, true) == 0)
{
find = true;
Type type = cellFillValue.GetType();
switch (type.ToString())
{
case "System.String":
string strValue = cellFillValue.ToString();
sheet.GetRow(rowIndex).GetCell(j).SetCellValue(strValue);
break;
case "System.Int32":
int intValue = Convert.ToInt32(cellFillValue.ToString());
sheet.GetRow(rowIndex).GetCell(j).SetCellValue(intValue);
break;
case "System.Decimal":
double decimalValue = Convert.ToDouble(cellFillValue.ToString());
sheet.GetRow(rowIndex).GetCell(j).SetCellValue(decimalValue);
break;
}
if (conNextRow)//如果承接下一行,则设置下一行单元格里的模板内容
{
sheet.GetRow(rowIndex + 1).GetCell(j).SetCellValue(cellTemplateValue);
sheet.GetRow(rowIndex + 1).GetCell(j).SetCellType(1);
}
}
}
}
}
}
#endregion
}
}
}
Demo 下载
分享到:
相关推荐
第一种方式操作简单,但也只能生成简单的Word文档,无法生成有表格的Word文档; 第二种方式可以生成复杂的Word文档,但是还要进行Word转xml,xml转ftl的双重转换,不适合内容经常变更的Word文档; 第三种方式有...
一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完成报表设计。 秉承“简单、...
ExcelQuicker 2.0正式版作者:EungeMSN: eudev.net@yeah...提供了对模板化编程的极力支持,比如在EQTable类的IsInsertMode属性就支持将批量数据导出到Excel模板文档中的一行;对.NET下的所有编程语言都提供支持;……
4、独有的报表查询显示功能:提供报表查询与输出的集成一次性实现,保证数据不同展现方式的一致性与完整性。 5、报表数据来源丰富:支持绑定(报表数据拉模式)与非绑定(报表数据推模式),一切数据库数据与其它数据都...
4、独有的报表查询显示功能:提供报表查询与输出的集成一次性实现,保证数据不同展现方式的一致性与完整性。 5、报表数据来源丰富:支持绑定(报表数据拉模式)与非绑定(报表数据推模式),一切数据库数据与其它数据都...
4、独有的报表查询显示功能:提供报表查询与输出的集成一次性实现,保证数据不同展现方式的一致性与完整性。 5、报表数据来源丰富:支持绑定(报表数据拉模式)与非绑定(报表数据推模式),一切数据库数据与其它数据都...
4、独有的报表查询显示功能:提供报表查询与输出的集成一次性实现,保证数据不同展现方式的一致性与完整性。 5、报表数据来源丰富:支持绑定(报表数据拉模式)与非绑定(报表数据推模式),一切数据库数据与其它数据都...
4、独有的报表查询显示功能:提供报表查询与输出的集成一次性实现,保证数据不同展现方式的一致性与完整性。 5、报表数据来源丰富:支持绑定(报表数据拉模式)与非绑定(报表数据推模式),一切数据库数据与其它数据都...
四、 增加IAcFuncionLib接口支持,以一种新的方式扩充函数库【SDK】 五、 增加LoadFromStream和SaveToStream方法及IAcNetStream接口支持【SDK】 六、 修改了单元格批量复制粘帖功能,当粘帖位置行数不够时,粘帖时...
四、 增加IAcFuncionLib接口支持,以一种新的方式扩充函数库【SDK】 五、 增加LoadFromStream和SaveToStream方法及IAcNetStream接口支持【SDK】 六、 修改了单元格批量复制粘帖功能,当粘帖位置行数不够时,粘帖时...
您可以创建报表,显示报表,打印报表,导出报表。 Stimulsoft Reports.Web将提供完整的报表创建周期,从报表模板开始到在浏览器中显示报表为止。这一过程可在web浏览器未被关闭时完成。 Stimulsoft Reports.Web是第...
23.2.3 动态决定显示哪一种树型 396 23.2.4 新建表单 398 23.2.5 修改表单 399 23.2.6 其它程序员用VBA编程接口 400 第24章、 网盘 405 24.1 安装网络硬盘服务器 405 24.2 网盘配置 406 24.2.1 管理控制台中的设置 ...
全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...
SOAOffice是一种中间件软件,不能直接给最终用户使用,需要软件编程人员将SOAOffice集成到软件系统中才能发挥它的威力。比较直观的来说,通常有以下需求的Web开发者推荐使用SOAOffice: 1. 需要把数据库字段内容填充...
报价之星主要由企业内投标工程师、方案制作人员使用,自动生成word、excel、html等多种格式报表,以解决众多企业在投标报价、项目报价问题。软件不仅拥有其强大的计算功能,且已录入多种模板逻辑,不需要再自主制作...
全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...
导出23种格式,如PDF,RTF,Excel,EMF等。支持数据图报表。支持运行时设计。 1 特点 (1) 可以将报表模板便捷地分隔为多页 使用本产品,用户可以以可视化的方式方便地将报表模板分隔为多个页面。您可以可视化地输入您...
导出23种格式,如PDF, RTF, Excel, EMF等。支持数据图报表。支持运行时设计。 1 特点 (1) 可以将报表模板便捷地分隔为多页 使用本产品,用户可以以可视化的方式方便地将报表模板分隔为多个页面。您可以可视化地...
全书分为14章和一个附录,包括如下内容:学习使用Excel 2007图表制作界面,掌握使用图形有效地表示数据的方式,根据要传达的信息选择正确的图表类型,学习可节省时间的解决方案,创建大多数人认为使用Excel无法...