2016-12-02 8 views
0

Моя цель - удалить все "#REF" из файла excel в workbook.xml. В настоящее время я могу найти все ссылки «#REF» во всей моей книге, но я не уверен, как их удалить из файла.Удалите определенное имя или неработающую ссылку в excel, используя C#

Мой код в залежи

Этот фрагмент кода находит все "#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 (var name in names) 
     { 
      if (regex.IsMatch(name.InnerText)) 
      { 
       name.Remove(); 
       Console.WriteLine(name.InnerText); 
       Console.WriteLine(count); 
      } 
     } 
+1

Действительно ли вы сохраняете 'SpreadsheetDocument' после того, как вы их удалили? –

+0

@CharlesMager Я использую ссылку OpenXml, есть ли у вас какие-либо идеи о том, как бы я ее сохранил, используя это? –

+1

. ['Сохранить'] (https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.workbook.save (v = office.14) .aspx) метод в' Workbook' будет мое предположение. Вам также придется изменить способ открытия, поскольку вы передали 'false' для' isEditable'. –

ответ

1

Вы можете посмотреть на the docs, а также на this How To, так как большинство из них применяется здесь.

Во-первых, когда вы открываете SpreadsheetDocument, то второй параметр должен быть true:

Вторым параметром является либо истинным, либо ложным и представляет собой, хотите ли вы файл, который будет открыт для редактирования. Любые изменения, внесенные вами в , не будут сохранены, если этот параметр не соответствует.

Во-вторых, вам необходимо позвонить Save по телефону Workbook после того, как вы удалите имена.

В-третьих, SpreadsheetDocument осуществляет IDisposable. Вы должны обернуть его оператором using, чтобы убедиться, что он удален, когда вы закончили с ним. Это обеспечит сброс изменений и поток файла будет закрыт. От the docs, распоряжаться:

Сбрасывает и сохраняет содержимое, закрывает документ и освобождает все ресурсы.

+0

Спасибо за вашу помощь –

+0

Что именно должен содержать мой оператор использования? –

+0

@CraigGallagher Весь ваш код, который работает над документом. Как [пример в How To] (https://msdn.microsoft.com/en-us/library/office/cc861607.aspx#sectionSection3) (есть небольшая опечатка, «использование» - строчная). –

 Смежные вопросы

  • Нет связанных вопросов^_^