如何创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);