if (paragraph.InnerText.Contains("[SIEMENS_COMPANY_LOCATION]")) { Run run = paragraph.Descendants<Run>().FirstOrDefault(); Text text = run.Descendants<Text>().FirstOrDefault(t => t.Text.Contains("[SIEMENS_COMPANY_LOCATION]")); if (text != null) { text.Text = form.SIEMENS_COMPANY_LOCATION; } } 找不到[SIEMENS_COMPANY_LOCATION]的值
时间: 2024-02-10 17:19:38 浏览: 30
这段代码的作用是在一个 Word 文档中查找文本 "[SIEMENS_COMPANY_LOCATION]" 并将其替换为变量 form.SIEMENS_COMPANY_LOCATION 的值。如果找不到该文本,则不会进行替换操作,即不会将任何文本替换为变量的值。所以,如果发现代码执行后找不到该文本的值,可能是以下几个原因:
1. Word 文档中没有该文本。
2. 代码中的文本与 Word 文档中的文本不完全匹配,例如大小写、空格等。
3. 变量 form.SIEMENS_COMPANY_LOCATION 的值为空或未正确赋值。
4. 代码中的文本搜索逻辑存在问题,需要进一步调试。
相关问题
List<Paragraph> paragraphs = document.MainDocumentPart.Document.Body.Descendants<Paragraph>().ToList(); foreach (Paragraph paragraph in paragraphs) { string text = paragraph.InnerText; string replacedText = text.Replace("[SIEMENS_COMPANY_LOCATION]", "替换后的字符串"); paragraph.InnerText = replacedText; } 这段代码会报错 CS0272 属性或索引器“OpenXmlCompositeElement.InnerText”不能用在此上下文中,因为 set 访问器不可访问 GBSRMSAPI D:\Source\GBSRMS\gbsrmsapi\GBSRMSAPI\Service\ESourcing\ESourcingMyRequestCore.cs 219 活动
这个错误是因为 `InnerText` 属性的 set 访问器是不可访问的,不能通过赋值来修改它。
你可以使用 `Run` 对象来替换文本,具体步骤如下:
1. 遍历 `List<Paragraph>` 中的每一个段落。
2. 对于每一个段落,使用 `paragraph.Descendants<Run>()` 方法获取到该段落中的所有 `Run` 对象。
3. 遍历每一个 `Run` 对象,使用 `run.InnerText` 获取其文本内容,然后使用 `String.Replace()` 方法将 `[SIEMENS_COMPANY_LOCATION]` 替换为指定的字符串。
4. 创建一个新的 `Run` 对象,并将替换后的文本内容设置为该 `Run` 对象的 `Text` 属性。
5. 将该 `Run` 对象添加到该段落中,然后删除原来的 `Run` 对象。
示例代码如下:
```csharp
List<Paragraph> paragraphs = document.MainDocumentPart.Document.Body.Descendants<Paragraph>().ToList();
foreach (Paragraph paragraph in paragraphs)
{
foreach (Run run in paragraph.Descendants<Run>())
{
string text = run.InnerText;
string replacedText = text.Replace("[SIEMENS_COMPANY_LOCATION]", "替换后的字符串");
Run newRun = new Run(new Text(replacedText));
run.Parent.InsertAfter(newRun, run);
run.Remove();
}
}
```
这样,你就可以替换文本并生成新的文档了。
foreach (Text text in paragraph.Descendants<Text>()) { text.Text = text.Text.Replace("#SIEMENS_COMPANY_LOCATION#", form.SIEMENS_COMPANY_LOCATION); }无法被替换
根据您提供的代码,您希望将文本中的`#SIEMENS_COMPANY_LOCATION#`替换为`form.SIEMENS_COMPANY_LOCATION`的值。如果替换没有成功,可能是因为文本中没有包含该占位符,或者占位符的格式不正确。以下是一些可能的原因和解决方法:
1. 检查文本中是否包含该占位符。您可以使用调试器或输出语句来检查`text.Text`的值,确保它们包含了`#SIEMENS_COMPANY_LOCATION#`。
2. 检查占位符的格式是否正确。确保占位符中没有任何多余的字符或空格,例如`# SIEMENS_COMPANY_LOCATION #`。如果占位符的格式不正确,可以尝试使用正则表达式或其他字符串处理方法来匹配它们。
3. 确保`form.SIEMENS_COMPANY_LOCATION`的值不为空。如果该值为空,替换操作将不会生效。您可以使用调试器或输出语句来检查`form.SIEMENS_COMPANY_LOCATION`的值,确保它们不为空。
4. 确保文本节点的`text.Text`属性可写。如果文本节点的`text.Text`属性只读,替换操作将不会生效。您可以使用调试器或输出语句来检查`text`对象的属性和方法,确保它们可写。
希望这些解决方法可以帮助您解决问题!如果您还有其他问题,请随时提出。