gpt4 book ai didi

OpenXML sdk 在我的 Excel 文档中修改工作表

转载 作者:行者123 更新时间:2023-12-04 12:13:50 24 4
gpt4 key购买 nike

我在excel中创建了一个空模板。
我想打开模板并编辑文档,但我不知道如何更改现有工作表。
那是代码:


using (SpreadsheetDocument xl = SpreadsheetDocument.Open(filename, true))
{
WorkbookPart wbp = xl.WorkbookPart;
WorkbookPart workbook = xl.WorkbookPart;
// Get the worksheet with the required name.
// To be used to match the ID for the required sheet data
// because the Sheet class and the SheetData class aren't
// linked to each other directly.
Sheet s = null;
if (wbp.Workbook.Sheets.Elements().Count(nm => nm.Name == sheetName) == 0)
{
// no such sheet with that name
xl.Close();
return;
}
else
{
s = (Sheet)wbp.Workbook.Sheets.Elements().Where(nm => nm.Name == sheetName).First();
}



WorksheetPart wsp = (WorksheetPart)xl.WorkbookPart.GetPartById(s.Id.Value);
Worksheet worksheet = new Worksheet();
SheetData sd = new SheetData();
//SheetData sd = (SheetData)wsp.Worksheet.GetFirstChild();
Stylesheet styleSheet = workbook.WorkbookStylesPart.Stylesheet;
//SheetData sheetData = new SheetData();
//build the formatted header style
UInt32Value headerFontIndex =
util.CreateFont(
styleSheet,
"Arial",
10,
true,
System.Drawing.Color.Red);



//build the formatted date style
UInt32Value dateFontIndex =
util.CreateFont(
styleSheet,
"Arial",
8,
true,
System.Drawing.Color.Black);



//set the background color style
UInt32Value headerFillIndex =
util.CreateFill(
styleSheet,
System.Drawing.Color.Black);



//create the cell style by combining font/background
UInt32Value headerStyleIndex =
util.CreateCellFormat(
styleSheet,
headerFontIndex,
headerFillIndex,
null);
/*
* Create a set of basic cell styles for specific formats...
* If you are controlling your table then you can simply create the styles you need,
* this set of code is still intended to be generic.
*/
_numberStyleId = util.CreateCellFormat(styleSheet, null, null, UInt32Value.FromUInt32(3));
_doubleStyleId = util.CreateCellFormat(styleSheet, null, null, UInt32Value.FromUInt32(4));
_dateStyleId = util.CreateCellFormat(styleSheet, null, null, UInt32Value.FromUInt32(14));
_textStyleId = util.CreateCellFormat(styleSheet, headerFontIndex, headerFillIndex, null);
_percentageStyleId = util.CreateCellFormat(styleSheet, null, null, UInt32Value.FromUInt32(9));



util.AddNumber(xl, sheetName, (UInt32)3, "E", "27", _numberStyleId);
util.AddNumber(xl, sheetName, (UInt32)3, "F", "3.6", _doubleStyleId);
util.AddNumber(xl, sheetName, (UInt32)5, "L", "5", _percentageStyleId);
util.AddText(xl, sheetName, (UInt32)5, "M", "Dario", _textStyleId);
util.AddDate(xl, sheetName, (UInt32)3, "J", DateTime.Now, _dateStyleId);
util.AddImage(xl, sheetName, imagePath, "Smile", "Smile", 30, 30);
util.MergeCells(xl, sheetName, "D12", "F12");
//util.DeleteValueCell(spreadsheet, sheetName, "F", (UInt32)8);



txtCellText.Text = util.GetCellValue(xl, sheetName, (UInt32)5, "M");



double number = util.GetCellDoubleValue(xl, sheetName, (UInt32)3, "E");
double numberD = util.GetCellDoubleValue(xl, sheetName, (UInt32)3, "F");
DateTime datee = util.GetCellDateTimeValue(xl, sheetName, (UInt32)3, "J");



//txtDoubleCell.Text = util.GetCellValue(spreadsheet, sheetName, (UInt32)3, "P");
txtPercentualeCell.Text = util.GetCellValue(xl, sheetName, (UInt32)5, "L");



string date = util.GetCellValue(xl, sheetName, (UInt32)3, "J");
double dateD = Convert.ToDouble(date);
DateTime dateTime = DateTime.FromOADate(dateD);
txtDateCell.Text = dateTime.ToShortDateString();



//worksheet.Append(sd);
/*
Columns columns = new Columns();
columns.Append(util.CreateColumnData(10, 10, 40));



worksheet.Append(columns);
*/
SheetProtection sheetProtection1 = new SheetProtection() { Sheet = true, Objects = true, Scenarios = true, SelectLockedCells = true, SelectUnlockedCells = true };
worksheet.Append(sheetProtection1);
wsp.Worksheet = worksheet;
wsp.Worksheet.Save();



xl.WorkbookPart.Workbook.Save();
xl.Close();

谢谢!

更新

我试过了,但它不起作用。我还在使用这种方法 (GetWorksheetPart()),但我想获取现有的工作表,对其进行编辑并保存修改后的新文档。

using (SpreadsheetDocument xl = SpreadsheetDocument.Open(filename, true))
{
WorkbookPart wbp = xl.WorkbookPart;



WorksheetPart worksheetPart = util.GetWorksheetPart(wbp, sheetName);
SheetProtection sheetProtection1 = new SheetProtection() { Sheet = true, Objects = true, Scenarios = true, SelectLockedCells = true, SelectUnlockedCells = true };

worksheetPart.Worksheet.Append(sheetProtection1);
worksheetPart.Worksheet.Save(); </pre></code>

我构建了文档但已损坏。为什么?

最佳答案

要获取要编辑的现有工作表,请使用此代码获取零件:

        public static WorksheetPart GetWorksheetPart(WorkbookPart workbookPart, string sheetName)
{
string relId = workbookPart.Workbook.Descendants<Sheet>()
.Where(s => sheetName.Equals(s.Name))
.First()
.Id;

return (WorksheetPart)workbookPart.GetPartById(relId);
}

只需确保您正在搜索的工作表名称存在,否则您会得到一些异常(exception)。然后使用对 worksheetpart 的引用执行您想要的任何编辑,最后只需调用 worksheetPart.Worksheet.Save();
编辑
SheetProtection元素需要插入 SheetData之后元素。附加时试试这一行: worksheetPart.Worksheet.Descendants<SheetData>().First().InsertAfterSelf(sheetProtection1);

关于OpenXML sdk 在我的 Excel 文档中修改工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com