NPOI的WORD填表

public static void Word_FillModelForReceipt(string modelPath, string savePath, Dictionary<string, string> content, Dictionary<string, string> price = default, Dictionary<int, Models.PosItem> posItem = default)
        {
            System.IO.FileStream fs = new System.IO.FileStream(modelPath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);

            NPOI.XWPF.UserModel.XWPFDocument docx = new NPOI.XWPF.UserModel.XWPFDocument(fs);//打开07(.docx)以上的版本的文档
            //遍历word中的段落
            foreach (var para in docx.Paragraphs)
            {
                foreach (var be in para.Body.BodyElements)
                {
                    if (be.GetType() == typeof(NPOI.XWPF.UserModel.XWPFParagraph))
                    {
                        var be1 = (NPOI.XWPF.UserModel.XWPFParagraph)be;
                        foreach (var kv in content)
                        {
                            if (be1.ParagraphText.Contains(kv.Key))
                            {
                                be1.ReplaceText(kv.Key, kv.Value);
                            }
                        }
                    }
                }
            }
            //插入表格
            if (price?.Count > 0)
            {
                if (docx.Tables?.Count > 0)
                {
                    NPOI.XWPF.UserModel.XWPFTable table = docx.Tables[0];
                    if (table.Rows?.Count > 0)
                    {
                        int i = 0;
                        foreach (var item in price)
                        {

                            var row = table.InsertNewTableRow(table.Rows.Count - 1);
                            var cell = row.GetCell(0) ?? row.CreateCell();
                            SetCellText(cell, table, item.Key);
                            cell = row.GetCell(1) ?? row.CreateCell();
                            cell = row.GetCell(2) ?? row.CreateCell();
                            //SetCellText(cell, table, item.Value.CountTitle);
                            cell = row.GetCell(3) ?? row.CreateCell();
                            //SetCellText(cell, table, item.Value.Count);
                            cell = row.GetCell(4) ?? row.CreateCell();
                            cell = row.GetCell(5) ?? row.CreateCell();
                            SetCellText(cell, table, "HK$", NPOI.XWPF.UserModel.ParagraphAlignment.RIGHT);
                            cell = row.GetCell(6) ?? row.CreateCell();
                            SetCellText(cell, table, item.Value, NPOI.XWPF.UserModel.ParagraphAlignment.RIGHT);
                            i++;
                        }
                    }
                }
            }

            //插入表格
            if (posItem?.Count > 0)
            {
                if (docx.Tables?.Count > 0)
                {
                    NPOI.XWPF.UserModel.XWPFTable table = docx.Tables[0];
                    if (table.Rows?.Count > 0)
                    {
                        int i = 0;
                        foreach (var item in posItem)
                        {

                            var row = table.InsertNewTableRow(table.Rows.Count - 1);
                            var cell = row.GetCell(0) ?? row.CreateCell();
                            SetCellText(cell, table, item.Value.Name);
                            cell = row.GetCell(1) ?? row.CreateCell();
                            cell = row.GetCell(2) ?? row.CreateCell();
                            SetCellText(cell, table, item.Value.CountTitle);
                            cell = row.GetCell(3) ?? row.CreateCell();
                            SetCellText(cell, table, item.Value.Count);
                            cell = row.GetCell(4) ?? row.CreateCell();
                            cell = row.GetCell(5) ?? row.CreateCell();
                            SetCellText(cell, table, "HK$", NPOI.XWPF.UserModel.ParagraphAlignment.RIGHT);
                            cell = row.GetCell(6) ?? row.CreateCell();
                            SetCellText(cell, table, item.Value.Price, NPOI.XWPF.UserModel.ParagraphAlignment.RIGHT);
                            i++;
                        }
                    }
                }
            }

            var tr = docx.Tables[0].Rows.Last();
            var tc = tr.GetCell(5);
            //SetCellStyle(tc, docx.Tables[0]);
            tc.SetBorderBottom(NPOI.XWPF.UserModel.XWPFTable.XWPFBorderType.DOUBLE, 1, 0, NPOI.HSSF.Util.HSSFColor.Black.HexString);

            tc.Paragraphs.First().Runs.First().IsBold = true;
            tc.Paragraphs.First().Runs.First().FontSize = 9;
            tc = tr.GetCell(6);
            //SetCellStyle(tc, docx.Tables[0]);
            tc.SetBorderBottom(NPOI.XWPF.UserModel.XWPFTable.XWPFBorderType.DOUBLE, 1, 0, NPOI.HSSF.Util.HSSFColor.Black.HexString);
            tc.Paragraphs.First().Runs.First().IsBold = true;
            tc.Paragraphs.First().Runs.First().FontSize = 9;

            //遍历表格      
            foreach (var table in docx.Tables)
            {
                foreach (var row in table.Rows)
                {
                    foreach (var cell in row.GetTableCells())
                    {
                        foreach (var para in cell.Paragraphs)
                        {
                            foreach (var be in para.Body.BodyElements)
                            {
                                if (be.GetType() == typeof(NPOI.XWPF.UserModel.XWPFParagraph))
                                {
                                    var be1 = (NPOI.XWPF.UserModel.XWPFParagraph)be;
                                    foreach (var kv in content)
                                    {
                                        if (be1.ParagraphText.Contains(kv.Key))
                                        {
                                            be1.ReplaceText(kv.Key, kv.Value);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            System.IO.FileStream output = new System.IO.FileStream(savePath, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite);
            docx.Write(output);
            fs.Close();
            fs.Dispose();
            output.Close();
            output.Dispose();
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: NPOI是一个用于操作Microsoft Office文件格式的开源库,包括Word、Excel和PowerPoint等。使用NPOI可以简化对Word文件的处理,包括创建、编辑、读取和保存等操作。 在NPOI,使用Word模板可以实现自动生成Word文件的功能。Word模板是一个预先设计好的Word文件,其包含了一些占位符,以便在需要的时候替换为真实的数据。通过将模板加载到NPOI,可以在代码动态地替换模板的占位符,生成最终的Word文件。 使用NPOI Word模板的步骤如下: 1. 导入NPOI的相关库文件,并创建一个NPOIWord文档对象。 2. 加载Word模板文件,可以是本地的文件路径,也可以是通过网络获取的文件。 3. 在模板通过标记或占位符来标示需要替换的内容,比如用{{name}}表示“姓名”。 4. 使用NPOI提供的替换方法,将占位符替换为真实的数据。 5. 根据需要进行其他的操作,比如插入表格、添加样式等。 6. 将生成的Word文件保存到指定的路径或输出流。 使用NPOI Word模板可以方便地生成需要大量重复或动态数据的Word文件,比如合同、报告、简历等。通过预先设计好的模板,可以在代码快速地替换数据并生成最终文件,大大提高了工作效率。 总之,NPOI Word模板是一种便捷的使用方式,可以在代码动态生成Word文件。通过使用NPOI库提供的方法,我们可以实现对Word文件的各种操作,满足不同场景的需求。 ### 回答2: NPOI是一款.NET平台上的开源库,用于读取、写入和操作Microsoft Office格式文件,包括Word文档。在NPOI,我们可以使用Word模板来生成和编辑Word文档。 使用NPOIWord模板功能,我们可以将已有的Word文档作为模板文件,然后在该模板的基础上进行内容的替换、样式的修改和表格的操作等。这样,我们就可以通过代码动态地生成符合需求的Word文档。 在使用NPOIWord模板时,我们首先需要加载模板文件。然后,我们可以通过NPOI提供的API,使用标签或书签将模板的部分内容进行占位,并在生成文档时将其替换为实际的内容。我们还可以使用NPOI提供的方法,对模板的样式进行设置和修改。此外,NPOI还提供了丰富的表格操作功能,可以动态地添加、删除和修改表格及其内容。 通过NPOIWord模板功能,我们可以灵活地生成包含动态内容的Word文档,这在一些需要批量生成和定制化的场景非常有用。例如,我们可以根据数据库的数据生成报告、合同、信函等文档,并在生成过程根据业务逻辑对内容和样式进行个性化定制。 总的来说,NPOIWord模板功能为我们提供了在.NET平台上操作Word文档的便利性和灵活性,充分满足了我们对于生成和编辑Word文档的需求。 ### 回答3: NPOI是一个用于处理Microsoft Office文档的开源库。它包含了用于操作Word、Excel和PowerPoint等文档的功能。 在使用NPOIWord模板功能时,我们首先需要创建一个包含合适格式的Word模板文件。模板文件可以包含各种我们需要的文本、图像、表格和其他内容。 使用NPOIWord模板功能,我们可以通过代码来读取和编辑模板文件的内容。需要注意的是,我们可以使用NPOI提供的API来找到并替换文本、插入图像、合并单元格并进行其他各种操作。 通过NPOIWord模板功能,我们可以根据需要生成多个实际应用的文档。我们可以将模板文件的占位符替换为具体的数据,实现自动生成报告、合同、邮件等文档的功能。 使用NPOIWord模板功能时,我们需要了解一些基本的操作方法和导入的命名空间。还需要注意的是,我们可以进一步扩展NPOI库的功能,以适应我们的特定需求。 总而言之,NPOIWord模板功能可以帮助我们实现对Word文档的自动化处理。通过使用合适的模板文件和代码,我们可以轻松地生成各种格式的文档,提高工作效率,减少重复劳动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值