在日常办公过程中,我们时常会遇到这样一种需求:需要将Excel表格中的每一行数据独立转换为一个Word文档。面对成百上千行的数据量时,如果采取逐一手动处理的方式,不仅耗时费力,效率低下,而且容易出错。因此,为了提升工作效率,减少不必要的人工操作,我特别设计并开发了一个便捷的小工具,它能够自动化地实现Excel数据到Word文件的批量转换功能,极大地简化了这一繁琐的过程,为我们的工作带来了极大的便利。
根据规定好的Excel格式,通过模板的方式实现逐行读取创建Word文件,支持每行生成一个word文件或者合并生成一个word文件。大家可以根据自己的需要调整模板进行定制开发。如果对你有帮助的话,帮忙点个star。
Gitee地址:https://gitee.com/hgm1989/excel-to-word-tools
NPOI是一个.NET平台上的开源项目,用于操作Microsoft Office格式文件(如Word、Excel、PowerPoint等)。NPOI提供了一组.NET类库,使开发人员能够在.NET应用程序中读取、写入和操作Office文档,而无需安装Microsoft Office软件。NPOI支持多种Office文件格式,包括XLS(Excel 97-2003)、XLSX(Excel 2007及以上)、DOC(Word 97-2003)、DOCX(Word 2007及以上)等。NPOI具有丰富的功能和灵活性,可以实现对Office文档的读取、写入、修改以及生成等操作。通过NPOI,开发人员可以轻松地处理和操作Office文档,为.NET应用程序的开发提供了便利性和可扩展性。
Github:https://github.com/nissl-lab/npoi
DocX 是一个.NET库,用于生成和操作 Microsoft Word 文档(.docx 格式)。DocX 提供了丰富的功能,使开发人员可以在.NET应用程序中轻松地创建、读取、修改和保存 Word 文档。
官网:https://docx.js.org/#/
DocX功能介绍
● 简单易用:DocX 提供了直观的 API,使得操作 Word 文档变得简单而直观,无需深入了解 Word 文档的底层结构。
● 支持多种操作:支持创建新的 Word 文档、读取现有文档的内容、修改文档的样式和内容,以及保存修改后的文档。
● 丰富的功能:DocX 支持插入文本、图片、表格、超链接等元素到Word文档中,可以设置段落样式、字体样式、对齐方式等。
● 保持样式:DocX 可以保持文档中的样式不变,包括字体、颜色、对齐方式等,确保生成的文档与原始文档保持一致。
● 跨平台兼容:生成的 Word 文档是基于 Open XML 格式的,保证了文档打开或者编辑的跨平台兼容性。
创建Word模板→读取Excel(Excel文档要定义好规则)→循环遍历每一行Excel数据填充模板→生成Word文档
下面是针对读取excel合并生成一个word的代码
using (FileStream file = new FileStream(txtFilePath.Text, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new HSSFWorkbook(file); // 使用 XSSFWorkbook 读取.xlsx格式的文件
ISheet sheet = workbook.GetSheetAt(0); // 获取第一个工作表
int rowCount = sheet.LastRowNum + 1;
DateTime now = DateTime.Now;
int year = now.Year;
int month = now.Month;
int days = now.Day;
// 循环保存文档
string templatePath = "template.docx";
string outputPath = txtOutPath.Text;
if (!Directory.Exists(outputPath))
{
Directory.CreateDirectory(outputPath);
}
// 创建新的Word文档
DocX wordDocument = DocX.Create(outputPath + "合并后.docx");
for (int i = 0; i < rowCount; i++)
{
IRow row = sheet.GetRow(i);
if (row != null)
{
int colCount = row.LastCellNum;
// 打开模板文件
using (DocX templateDoc = DocX.Load(templatePath))
{
// 替换模板中的占位符
if (row.GetCell(0) == null)
{
continue;
}
templateDoc.ReplaceText("{商铺名称}", row.GetCell(0).ToString());
templateDoc.ReplaceText("{年}", year.ToString());
templateDoc.ReplaceText("{月}", month.ToString());
templateDoc.ReplaceText("{日}", days.ToString());
templateDoc.ReplaceText("{店铺位置}", row.GetCell(1).ToString());
templateDoc.ReplaceText("{抄表起数}", row.GetCell(2).ToString());
templateDoc.ReplaceText("{抄表止数}", row.GetCell(3).ToString());
templateDoc.ReplaceText("{实际用电}", row.GetCell(4).ToString());
templateDoc.ReplaceText("{用电倍率}", row.GetCell(5).ToString());
templateDoc.ReplaceText("{本期用电度数}", row.GetCell(6).ToString());
templateDoc.ReplaceText("{电费单价}", row.GetCell(7).ToString());
string str = row.GetCell(8).ToString();
if (string.IsNullOrWhiteSpace(str))
{
int fee = (int)Math.Round(Convert.ToDouble(str));
templateDoc.ReplaceText("{本期电费}", fee.ToString());
}
else
{
templateDoc.ReplaceText("{本期电费}", row.GetCell(8).ToString());
}
wordDocument.InsertDocument(templateDoc);
}
}
}
wordDocument.Save();
MessageBox.Show("批量生成Word成功");
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。