如何创build一个可编辑的Excel
我正在创build一个Excel文件:
SpreadsheetDocument document = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook) WorkbookPart workBookPart = document.AddWorkbookPart(); workBookPart.Workbook = new Workbook(); WorksheetPart workSheetPart = workBookPart.AddNewPart<WorksheetPart>(); workSheetPart.Worksheet = new Worksheet(); Sheets sheets = workBookPart.Workbook.AppendChild(new Sheets()); Sheet sheet = new Sheet() { Id = workBookPart.GetIdOfPart(workSheetPart), SheetId = 1, Name = "Test Sheet" }; sheets.Append(sheet); workBookPart.Workbook.Save();
当我打开文件时,它只是ReadOnly,我怎样才能使其可编辑的用户?
ClosedXML是优先级,解决scheme的可选方式可以是OpenXML
您在那里提供的代码会创build一个无效的文件,而不是只读的文件。 有两个小问题。 首先,每个Worksheet
下必须有一个SheetData
元素,其次,您需要在文档上直接或间接通过using语句调用Close
方法。
以下代码将创build一个可通过显式调用Close
来编辑的文件
SpreadsheetDocument document = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook); WorkbookPart workBookPart = document.AddWorkbookPart(); workBookPart.Workbook = new Workbook(); WorksheetPart workSheetPart = workBookPart.AddNewPart<WorksheetPart>(); workSheetPart.Worksheet = new Worksheet(); //a worksheet *must* have exactly one child SheetData workSheetPart.Worksheet.AppendChild(new SheetData()); Sheets sheets = workBookPart.Workbook.AppendChild(new Sheets()); Sheet sheet = new Sheet() { Id = workBookPart.GetIdOfPart(workSheetPart), SheetId = 1, Name = "Test Sheet" }; sheets.Append(sheet); workBookPart.Workbook.Save(); //the document must be closed (and ideally disposed) document.Close(); document.Dispose();
这是相同的,但用using
语句代替:
using (SpreadsheetDocument document = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook)) { WorkbookPart workBookPart = document.AddWorkbookPart(); workBookPart.Workbook = new Workbook(); WorksheetPart workSheetPart = workBookPart.AddNewPart<WorksheetPart>(); workSheetPart.Worksheet = new Worksheet(); //a worksheet *must* have exactly one child SheetData workSheetPart.Worksheet.AppendChild(new SheetData()); Sheets sheets = workBookPart.Workbook.AppendChild(new Sheets()); Sheet sheet = new Sheet() { Id = workBookPart.GetIdOfPart(workSheetPart), SheetId = 1, Name = "Test Sheet" }; sheets.Append(sheet); workBookPart.Workbook.Save(); }
编辑
在ClosedXml中做这个要简单得多。 以下将生成一个等效的工作簿:
using ClosedXML.Excel; .... var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Test Sheet"); workbook.SaveAs(filename);