【问题标题】:Perform find & replace in excel doc in C#在 C# 的 excel doc 中执行查找和替换
【发布时间】:2011-04-26 15:31:06
【问题描述】:

我正在尝试创建一个在 C# 中动态填充的邮资标签。

我认为我可以做的是在 Excel 中创建标签,这样我就可以得到完美的布局,然后使用 OpenXML 替换字段。即,我有名为 XXAddressLine1XX 之类的字段,我想在其中编辑 XML 并将该文本替换为数据库中的实际 Address Line 1

以前有没有人做过类似的事情并且可以发布一些我可以尝试的代码?我以前使用 OpenXML 对 word 文档执行此操作,但是在 c# 中使用 OpenXML 时,我似乎无法找到 Excel 文档的 XML 数据,所以我正在努力取得进展。

要么这样,或者有什么更好的方法我可以尝试做到这一点?

【问题讨论】:

    标签: c# asp.net xml excel openxml


    【解决方案1】:

    时不时地,有一个编程问题最好用非编程解决方案来解决。长期以来,企业一直需要批量打印邮件标签,近几十年来,Microsoft Word 等程序通过“邮件合并”功能使这一点变得非常简单。示例见http://office.microsoft.com/en-us/word-help/demo-use-mail-merge-to-format-and-print-mailing-labels-HA001190394.aspx

    Word 的邮件合并将允许您连接到各种数据源。给定的示例使用 Excel 电子表格,但您也可以使用 Access 或 SQL 数据库等。

    【讨论】:

    • 感谢您的回复 - 我实际上不需要大量创建标签 - 每个客户只需打印他们需要的标签,但无论如何我都会查看链接
    • 啊,我明白了。所以这是一个程序,它将创建一个文件供客户用来打印他们的标签?另一种选择可能是使用 PDF 编写器。这可能会让您更好地控制输出,并且不需要您的客户安装 Excel。
    • 感谢您的建议 StriplingWarrior。我注意到该应用程序已经使用了 PDFSharp,所以我放弃了 Excel/XML 的东西,只是将标签直接绘制到 PDF。工作完成 - 也取得了更好的结果!
    【解决方案2】:

    纯粹的学术答案是:有可能。我编写了一组模板解析类,它们在 PowerPoint 演示文稿中搜索,替换我发明的标记语言中的标签,并使用从数据库中获取的图表和动态文本对象。字符串替换位中最棘手的部分是处理Run 元素内Paragraph 元素中出现的标签。如果您在标签中使用特殊字符(例如“{”或空格),通常会发生这种情况。我能够通过将整个 TextBody 元素的文本存储在一个巨大的字符数组中来解决它(在你的情况下,它将是 Cell 元素的内容),存储一个范围列表,枚举字符中的位置数组每个Run 元素的开始和结束,然后在适当注意Run 边界的同时遍历字符数组。请注意,如果您的标签跨越多个 Run 元素,您需要在插入替换 Run 之前删除任何额外内容并跨越边界剪切内容。不幸的是,我无法发布任何代码,因为这项工作是为一家公司完成的,但这是实现它的一般思路。我无法处理任何换行的情况(即标签中带有换行符),因为这需要编写一个交叉 Paragraph 索引器,这超出了我想要实现的范围。也可以这样做,但我认为这会困难得多。

    【讨论】:

      【解决方案3】:

      Powershell 脚本扩展 PSExcel 具有搜索和替换功能:

      PSExcel: https://github.com/RamblingCookieMonster/PSExcel

      Import-Module d:\psexcel\trunk\PSExcel\PSExcel
      
      # Get commands in the module
      Get-Command -Module PSExcel
      
      # Get help for a command
      Get-Help Import-XLSX -Full
      
       # Modify the path of the Excel file to your local svn ceck-out
       Get-ChildItem "C:\tmp\Source" -Filter *.xlsx | Foreach-Object{
          $fileName = $_.FullName
      
          # Open an existing XLSX to search and set cells within
          $Excel = New-Excel -Path $_.FullName
      
          $Workbook = $Excel | Get-Workbook
      
          #$Excel | Get-Worksheet
          $Worksheet = $Workbook | Get-Worksheet -Name "Sheet1"
      
      
          #Search for any cells like 'Chris'.  Set them all to Chris2
          $Worksheet | Search-CellValue {$_ -like 'Chris'} -As Passthru | Set-CellValue -Value "Chris2"
      
          #Save your changes and close the ExcelPackage
          $Excel | Save-Excel -Close
       }
      

      【讨论】:

        猜你喜欢
        • 2018-11-11
        • 1970-01-01
        • 2013-03-10
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        • 2017-01-22
        • 2013-07-15
        • 1970-01-01
        相关资源
        最近更新 更多