比如需导出如下形式的报表:
里面数据字段分类很多,又含公式统计等情况。
解决方案:利用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 下载
分享到:
相关推荐
总结起来,这个项目通过`jxls2`库提供了一种高效、灵活的Excel报表导出解决方案,支持单元格合并和复杂的模板设计,能够满足多样化的需求,对于提升企业级应用的数据处理能力有着显著的作用。开发者只需花费较少的...
在IT行业中,Excel模板导出是一项常见的数据处理任务,尤其在面对复杂模板情况时,它显得尤为重要。这种技术主要用于批量生成或更新具有统一格式的Excel文件,例如财务报告、销售统计或是数据分析等场景。下面我们将...
1. **模板设计**:首先,我们需要设计一个Excel模板,模板中包含了报表的结构、样式和占位符。这些占位符是动态的,将在运行时被实际数据替换。例如,我们可以用`${name}`表示姓名字段,`${age}`表示年龄字段等。 2...
在Jeecg中,Excel模板导出功能是其报表模块的一个重要组成部分。 在实现"Jeecg Excel通过模板导出"时,首先你需要创建一个Excel模板。这个模板可以包含各种预定义的样式,如字体、颜色、边框、对齐方式、公式等。...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用、Web应用以及游戏等领域。本主题聚焦于如何使用C#来实现一个复杂的Excel导出功能,结合模板和映射文件,以及可能涉及的操作Excel宏。这个过程...
总结来说,JXLS结合Excel模板是一种高效且灵活的Java Excel导出解决方案。它通过模板和数据映射的方式,降低了开发复杂度,提升了代码的可维护性。通过熟悉和掌握JXLS,开发者能够轻松应对各种复杂的Excel生成需求,...
"Excel导出数据(根据Excel模板定义)"这个主题涉及到的核心技术是如何根据预设的Excel模板生成和导出数据,通常用于批量生成报表或者进行复杂的数据呈现。下面将详细解释这一过程及其相关知识点。 1. **Excel模板...
在基于模板导出Excel的过程中,开发者通常会先创建一个包含固定格式和占位符的Excel模板文件。模板中可能包含了各种样式设置,如字体、颜色、边框、合并单元格等,以及一些预定义的公式。然后,通过NPOI库,开发者...
当涉及到数据导入导出时,Spring提供了一种高效且灵活的方式,特别是在处理Excel数据时。本篇文章将深入探讨如何基于Spring实现基于Excel模板的导入导出功能。 首先,我们来理解“基于excel模板的导入导出”这个...
这篇博文的源码提供了一个使用EasyPOI导出包含图片的Excel模板数据的示例,这在报表生成、数据分析和报告制作等场景中非常实用。 首先,我们来看看`ExcelTemplateExportUtil.java`,这个类是导出工具的核心,它实现...
它引入了一种基于模板的方法,使得动态创建和更新Excel文件变得简单,类似于我们在HTML和JSP中使用JSTL标签的方式。 2. **Apache POI简介**: Apache POI是Apache软件基金会的一个开源项目,提供了API来读写...
本文档主要介绍了使用 JSP 和 jxls 库来实现 Excel 文件的导出,针对 eMan 系统中普遍使用的导出 Excel 的方法 JXL 的缺陷,引入了一种新的方法来解决大规模报表的导出问题。 1. 背景 在 eMan 系统的开发过程中...
总的来说,"基于POI+XML配置模板Excel导出"是一种高效的Excel导出策略,它利用了POI的强大功能和XML模板的灵活性,使得在Java应用中生成格式化的Excel文件变得更加便捷。对于需要处理大量数据报表的项目,这样的解决...
1. **模板导出**:用户可以预先定义Excel模板,包括单元格格式、样式、公式等。在导出数据时,根据模板填充数据,确保导出的Excel与预期的样式一致。这通常涉及到HSSFCell和XSSFCell对象的使用,它们代表Excel中的...
在“按模板导出”这个场景下,模板通常包含了预设的格式、样式和计算公式,开发者只需要根据数据填充模板即可快速生成报表。 以下是使用NPOI按模板导出Excel的步骤: 1. **安装NPOI库**:在你的C#项目中,可以通过...
总的来说,Aspose.Cells库提供了一种高效、灵活的方式来处理Excel文档,特别是对于需要在程序中动态生成带有图表的报表时,它是一个非常实用的工具。结合C#编程语言,开发者可以轻松实现这一目标,无需依赖Microsoft...
在这个场景下,我们将深入探讨如何使用C#和Itextsharp库根据模板导出PDF报表。 首先,我们需要理解模板的概念。模板通常是一个预定义的PDF文件,包含固定的布局和样式,而实际的数据将被插入到这些预定的位置。在...
Excel导出模板控件是一种基于NPOI库的高级功能,它使得开发人员能够在Web应用程序中轻松地生成和导出Excel文件,而无需用户在本地计算机上安装Microsoft Office。NPOI是一个开源的.NET库,它允许程序员读取、写入和...
在IT行业中,Excel是一种广泛使用的数据处理和分析工具,尤其在数据分析、报表制作以及数据可视化等领域。"以模板导出的Excel源码"这个主题主要关注如何通过编程方式利用模板来自动化生成Excel文件。通常,这涉及到...
帆软报表提供了一种灵活的方式,可以将设计好的报表导出为Excel格式。这通常涉及到报表查询、数据填充以及格式转换。用户可以通过API调用或报表设计器中的导出选项来实现这一功能。导出的Excel文件可以保持报表原有...