openxml spreadsheat save-as

У меня есть электронная таблица Excel 2007, которую я редактирую с помощью OpenXML SDK 2. Я удаляю несколько строк и т. Д. Я хотел бы знать, как сохранить этот файл Spreadsheet в другом имени файла.

Насколько мне известно, нет встроенного способа изменить имя файла, но так как одним из способов редактирования файла является использование потоков, вы можете легко указать имя файла, который вы хотите, при написании содержимого потока:

byte[] byteArray = File.ReadAllBytes("C:\\temp\\oldName.xltx"); using (MemoryStream stream = new MemoryStream()) { stream.Write(byteArray, 0, (int)byteArray.Length); using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(stream, true)) { // Do work here } File.WriteAllBytes("C:\\temp\\newName.xlsx", stream.ToArray()); } 

Существуют и другие способы изменить имя, например, при возврате файла пользователю в веб-приложении ASP.NET MVC, но это зависит от того, что вы пытаетесь сделать.

Посмотрите на эту библиотеку ClosedXML, которая основана на OpenXML ; он упрощает много операций с документами и дает вам метод SaveAs . Вот пример того, что вы можете сделать.

  var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Sample Sheet"); worksheet.Cell("A1").Value = "Hello World!"; workbook.SaveAs("HelloWorld.xlsx"); 

Я настоятельно рекомендую ClosedXML – просто использовал его в первый раз, и изначально я сделал функцию «Импорт из excel» за несколько часов, используя стандартный SDK Open XML 2.0 – я переписал его менее чем за 15 минут, а также сделав экспорт в течение 10 минут с помощью этого инструмента.

Вот мое решение для сохранения, протестированное со сложной книгой с макросами и условным форматированием и т. Д. (Этот метод находится в оболочке с свойством SpreadsheetDocument «Document»):

  /// <summary> /// Saves as. /// </summary> /// <param name="fileName">Name of the file.</param> public void SaveAs(String filename) { String dir = filename.Replace(System.IO.Path.GetFileName(filename), String.Empty); if (!System.IO.Directory.Exists(dir)) System.IO.Directory.CreateDirectory(dir); SpreadsheetDocument newDoc = SpreadsheetDocument.Create(filename, Document.DocumentType); //Make sure it's clear newDoc.DeleteParts<OpenXmlPart>(newDoc.GetPartsOfType<OpenXmlPart>()); //Copy all parts into the new book foreach (OpenXmlPart part in Document.GetPartsOfType<OpenXmlPart>()) { OpenXmlPart newPart = newDoc.AddPart<OpenXmlPart>(part); } //Perform 'save as' newDoc.WorkbookPart.Workbook.Save(); newDoc.Close(); this.Document.Close(); //Open new doc this.Document = SpreadsheetDocument.Open(filename, true); } 
  • DocumentFormat.openxml Проблема чтения файлов Excel
  • OpenXmlReader не извлекает все содержимое ячеек из листа excel .xlsx VB Net
  • Два CellValues ​​с разными стилями в ячейке OPEN XML SDK 2.0
  • Как применить шрифт и цвет текста в ячейках файла Excel с помощью openxml
  • открыть xml excel Вставить фактическое значение в placeholder
  • Как выводить таблицу Excel с изображениями из ASP.net
  • Преобразование .XLSX или .XLSM в XML
  • Чтение даты из файла Excel с использованием OpenXML
  • Цикл Foreach с использованием Regex для поиска шаблона XML
  • Экспорт DataTable в Excel с открытым Xml SDK в c #
  • Используя Open XML, как вы вставляете формулу в лист Excel 2010?
  • Давайте будем гением компьютера.