C# 如何创建可编辑的excel

C# 如何创建可编辑的excel,c#,excel,openxml,closedxml,C#,Excel,Openxml,Closedxml,我正在创建Excel文件: SpreadsheetDocument document = SpreadsheetDocument.Create(filename, SpreadsheetDocumentType.Workbook) WorkbookPart workBookPart = document.AddWorkbookPart(); workBookPart.Workbook = new Workbook(); WorksheetPart

我正在创建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();
SpreadsheetDocument文档=SpreadsheetDocument.Create(文件名,SpreadsheetDocumentType.工作簿)
WorkbookPart WorkbookPart=document.AddWorkbookPart();
workBookPart.工作簿=新工作簿();
WorksheetPart WorksheetPart=workBookPart.AddNewPart();
工作表部分。工作表=新工作表();
Sheets Sheets=workBookPart.工作簿.AppendChild(新工作表());
图纸=新图纸()
{
Id=workBookPart.GetIdOfPart(工作表部分),
SheetId=1,
Name=“测试表”
};
附页(页);
workBookPart.Workbook.Save();
当我打开文件时,它是只读的,我如何使它对用户可编辑


ClosedXML是优先考虑的,解决方案的另一种方法是OpenXML。您在这里提供的代码创建了一个无效文件,而不是只读文件。有两个小问题。首先,每个
工作表下必须只有一个元素,其次,您需要调用文档上的方法(直接或通过using语句间接调用)

以下代码将创建一个可编辑的文件,通过显式调用
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();
编辑

在ClosedXml中执行此操作要简单得多。以下内容将生成等效工作簿:

using ClosedXML.Excel;
....

var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Test Sheet");
workbook.SaveAs(filename);

关闭VS。当VS仍然打开时,文件是只读的,因为VS应用程序仍然打开它。@jdweng它是关闭的,当我打开文件时,它仍然是只读的。有没有办法用closedxml复制它?您的答案很完美,但是使用closedXML更容易实现excel文件所需的功能,但是在使用closedXML时,我遇到了相同的问题,即文件是只读的。我只是想用closedXML完成整个项目,而不是与OpenXMLHi@Toni混合,我已经更新了答案,以包含closedXML示例。
using ClosedXML.Excel;
....

var workbook = new XLWorkbook();
var worksheet = workbook.Worksheets.Add("Test Sheet");
workbook.SaveAs(filename);