在C#中执行查找和replaceexcel文档

我正在尝试创build一个在C#中dynamic填充的邮资标签。

我以为我能做的就是在Excel中创build标签,以便完美的布局,然后使用OpenXML来replace字段。 即我有字段称为像XXAddressLine1XX ,我想要编辑的XML和用数据库中的实际Address Line 1replace该文本的东西。

有没有人实际上做过类似于此之前,可以张贴一些代码,我可以尝试? 我以前使用过OpenXML来处理Word文档,但是在c#中使用OpenXML时,我似乎无法findExcel文档的XML数据,所以我正在努力地取得进展。

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

现在,有一个编程问题最好用非编程解决scheme来解决。 企业一直需要长时间打印邮件标签,近几十年来,像Microsoft Word这样的程序通过“邮件合并”function使得这个过程非常简单。 有关示例,请参阅http://office.microsoft.com/zh-CN/word-help/demo-use-mail-merge-to-format-and-print-mailing-labels-HA001190394.aspx

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

纯粹的学术答案是:这是可能的。 我编写了一套模板parsing类,它们通过PowerPoint演示文件进行search,replace标记语言,这些标记是使用从数据库中提取的图表和dynamic文本对象发明的。 stringreplace位最棘手的部分是处理Paragraph元素中Run元素间发生的标记。 如果您在标签中使用特殊字符(如“{”或空格),通常会发生这种情况。 我能够通过将整个TextBody元素的文本存储在一个巨大的字符数组中(在你的情况下它将是一个Cell元素的内容)来解决这个问题,存储一个范围列表,它列举了字符数组中的每个Run元素开始和结束,然后适当地注意Run边界,然后行走字符数组。 请注意,如果您的代码跨越多个Run元素,则在插入replaceRun之前,您需要删除所有附加内容并跨越边界剪切内容。 不幸的是我不能发布任何代码,因为这项工作是为一家公司完成的,但这是如何实现它的总体思路。 我无法处理任何换行符的情况(即标签中出现换行符),因为这需要编写一个交叉Paragraph索引器,这超出了我想实现的范围。 这也可以做到,但是我认为这会更困难。

Powershell脚本扩展PSExcel具有search和replacefunction:

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 }