如何创建可编辑的 excel
How to create an editable excel
我正在创建一个 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();
当我打开文件时它只是只读的,我如何才能使它对用户可编辑?
ClosedXML优先,替代解决方案可以是OpenXML
您在此处提供的代码创建了一个无效文件,而不是只读文件。有2个小问题。首先,文档中必须只有一个 SheetData
element under each Worksheet
and secondly you need to call the Close
方法(直接或间接通过 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();
下面是相同的,但使用了 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);
我正在创建一个 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();
当我打开文件时它只是只读的,我如何才能使它对用户可编辑?
ClosedXML优先,替代解决方案可以是OpenXML
您在此处提供的代码创建了一个无效文件,而不是只读文件。有2个小问题。首先,文档中必须只有一个 SheetData
element under each Worksheet
and secondly you need to call the Close
方法(直接或间接通过 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();
下面是相同的,但使用了 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);