[英]openxml spreadsheat save-as
我有一個用OpenXML SDK 2編輯的Excel 2007電子表格。我刪除了一些行等。我想知道如何將SpreadsheetDocument保存到另一個文件名。
據我所知,沒有內置的更改文件名的方法,但是由於編輯文件的一種方法是使用流,因此在寫出流的內容時可以輕松地提供所需文件的名稱:
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導入”功能-我用不到15分鍾的時間重寫了它,而且使用此工具在10分鍾內即可導出到excel。
您可以將該Spreadsheetdocument保存為另一個文件名,然后將其打開以進行編輯。
string sourceFile = "C:\Users\***.xlsx";
string destFile = "C:\Users\*****.xlsx";
System.IO.File.Copy(sourceFile, destFile, true);
using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(destFile, true))
{
//remove some rows etc
//save workbookpart
}
這是我的另存為解決方案,已通過具有宏和條件格式等的復雜工作簿進行了測試(此方法位於具有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);
}
我不知道此功能引入了哪個版本,但是我使用OpenXmlPackage.SaveAs
,其中
SpreadsheetDocument
是OpenXmlPackage
的子類。
此函數返回新文檔,因此您可以切換到復制的文檔並對其進行更改:
void FromTemplate()
{
using var template = SpreadsheetDocument.Open("Template.xlsx", isEditable: true);
using var output = (SpreadsheetDocument)template.SaveAs(path);
//no longer need to keep handle open
template.Dispose();
//apply your changes to package
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.