openxml传播保存为

我有一个Excel 2007电子表格,我用OpenXML SDK 2编辑。我删除了一些行等,我想知道如何将该Spreadsheetdocument保存到另一个文件名。

据我所知,没有内置的方法来改变文件名,但是由于编辑文件的一种方式是使用stream,当写出stream的内容时,可以很容易地给出所需文件的名称:

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 Web应用程序中将文件返回给用户,但这取决于你正在做什么。

看看这个基于OpenXML的图书馆ClosedXML ; 它简化了大量的文档操作并为您提供了SaveAs方法。 这里是你可以做的一个例子。

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

我强烈推荐使用ClosedXML – 第一次使用它,最初我使用标准的Open XML 2.0 SDK在几个小时内完成了“从excel导入”function – 我已经在15分钟内重写了它,使用此工具在10分钟内完成导出到excel。

这里是我的解决scheme,用macros和条件格式化等复杂的工作簿进行testing(此方法是在一个包含SpreadsheetDocument属性“文档”的包装):

  /// <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); }