使用 C# 删除 excel 中定义的名称或损坏的引用
Remove a defined name or broken reference in excel using C#
我的目标是从 workbook.xml 中的 excel 文件中删除所有 "#REF"
。我目前可以做的是在我的工作簿中找到所有“#REF”引用,但是我不确定如何从文件中删除它们。
我的代码是休闲的
这段代码找到文件
中的所有"#REF"
var spreadsheet = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(@"C:\Users\Craig\Desktop\newTest.xlsx", false);
var workbook = spreadsheet.WorkbookPart;
var names = workbook.Workbook.DefinedNames;
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"#REF");
int count= result.InactiveNamedRangeCount = names.Count(n => regex.IsMatch(n.InnerText));
Console.WriteLine(count);
foreach (var name in names)
{
if (regex.IsMatch(name.InnerText))
{
Console.WriteLine(name.InnerText);
}
}
我在这里尝试遍历每个 #REF
以使用 foreach 删除它,但它不会删除任何一个,我不确定为什么。
foreach (var name in names)
{
if (regex.IsMatch(name.InnerText))
{
name.Remove();
Console.WriteLine(name.InnerText);
Console.WriteLine(count);
}
}
您可能想看看 the docs and also at this How To,因为大部分内容都适用于此。
首先,当你打开SpreadsheetDocument
时,第二个参数应该是true
:
The second parameter is either true or false and represents whether you want the file to be opened for editing. Any changes that you make to the document will not be saved if this parameter is false.
其次,删除名称后,您需要在 Workbook
上调用 Save
。
三、SpreadsheetDocument
实现IDisposable
。您应该用 using
语句将其包装起来,以确保在您完成处理后将其丢弃。这将确保刷新更改并关闭文件流。来自the docs,处置:
Flushes and saves the content, closes the document, and releases all resources.
我的目标是从 workbook.xml 中的 excel 文件中删除所有 "#REF"
。我目前可以做的是在我的工作簿中找到所有“#REF”引用,但是我不确定如何从文件中删除它们。
我的代码是休闲的
这段代码找到文件
中的所有"#REF"
var spreadsheet = DocumentFormat.OpenXml.Packaging.SpreadsheetDocument.Open(@"C:\Users\Craig\Desktop\newTest.xlsx", false);
var workbook = spreadsheet.WorkbookPart;
var names = workbook.Workbook.DefinedNames;
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"#REF");
int count= result.InactiveNamedRangeCount = names.Count(n => regex.IsMatch(n.InnerText));
Console.WriteLine(count);
foreach (var name in names)
{
if (regex.IsMatch(name.InnerText))
{
Console.WriteLine(name.InnerText);
}
}
我在这里尝试遍历每个 #REF
以使用 foreach 删除它,但它不会删除任何一个,我不确定为什么。
foreach (var name in names)
{
if (regex.IsMatch(name.InnerText))
{
name.Remove();
Console.WriteLine(name.InnerText);
Console.WriteLine(count);
}
}
您可能想看看 the docs and also at this How To,因为大部分内容都适用于此。
首先,当你打开SpreadsheetDocument
时,第二个参数应该是true
:
The second parameter is either true or false and represents whether you want the file to be opened for editing. Any changes that you make to the document will not be saved if this parameter is false.
其次,删除名称后,您需要在 Workbook
上调用 Save
。
三、SpreadsheetDocument
实现IDisposable
。您应该用 using
语句将其包装起来,以确保在您完成处理后将其丢弃。这将确保刷新更改并关闭文件流。来自the docs,处置:
Flushes and saves the content, closes the document, and releases all resources.