执行find &在c#中替换excel文档

本文关键字:替换 excel 文档 find 执行 | 更新日期: 2023-09-27 17:52:55

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

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

有没有人真的做过类似的事情之前,可以张贴一些代码,我可以尝试?我以前使用过OpenXML来处理word文档,但是在c#中使用OpenXML时,我似乎找不到Excel文档的XML数据,所以我正在努力取得进展。

要么,或者有更好的方法我可以尝试完成这个?

执行find &在c#中替换excel文档

有时候,会有一些编程问题最好用非编程解决方案来解决。长期以来,企业需要大量打印邮件标签,近几十年来,像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数据库等。

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

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
 }