gpt4 book ai didi

c# - 使用 Open XML SDK 2.0 将字符串数组作为一行插入到 Excel 文档中

转载 作者:行者123 更新时间:2023-11-30 22:49:42 24 4
gpt4 key购买 nike

代码运行,但破坏了我的 excel 文档。任何帮助将非常感激!我用 this作为引用。

    public void AddRow(string fileName, string[] values) {
using (SpreadsheetDocument doc =
SpreadsheetDocument.Open(fileName, true)) {
SharedStringTablePart sharedStringPart =
GetSharedStringPart(doc);

WorksheetPart worksheetPart =
doc.WorkbookPart.WorksheetParts.First();
uint rowIdx = AppendRow(worksheetPart);

for (int i = 0; i < values.Length; ++i) {
int stringIdx = InsertSharedString(values[i],
sharedStringPart);

Cell cell = InsertCell(i, rowIdx, worksheetPart);
cell.CellValue = new CellValue(stringIdx.ToString());
cell.DataType = new EnumValue<CellValues>(
CellValues.SharedString);

worksheetPart.Worksheet.Save();
}
}
}

private SharedStringTablePart GetSharedStringPart(
SpreadsheetDocument doc) {
if (doc.WorkbookPart.
GetPartsCountOfType<SharedStringTablePart>() > 0)
return doc.WorkbookPart.
GetPartsOfType<SharedStringTablePart>().First();
else
return doc.WorkbookPart.
AddNewPart<SharedStringTablePart>();
}

private uint AppendRow(WorksheetPart worksheetPart) {
SheetData sheetData = worksheetPart.Worksheet.
GetFirstChild<SheetData>();

uint rowIndex = (uint)sheetData.Elements<Row>().Count();

Row row = new Row() { RowIndex = rowIndex };
sheetData.Append(row);

return rowIndex;
}

private int InsertSharedString(string s,
SharedStringTablePart sharedStringPart) {
if (sharedStringPart.SharedStringTable == null)
sharedStringPart.SharedStringTable =
new SharedStringTable();

int i = 0;

foreach (SharedStringItem item in
sharedStringPart.SharedStringTable.
Elements<SharedStringItem>()) {
if (item.InnerText == s)
return i;
++i;
}

sharedStringPart.SharedStringTable.AppendChild(
new Text(s));
sharedStringPart.SharedStringTable.Save();

return i;
}

private Cell InsertCell(int i, uint rowIdx,
WorksheetPart worksheetPart) {
SheetData sheetData = worksheetPart.Worksheet.
GetFirstChild<SheetData>();
string cellReference = AlphabetMap.Instance[i] + rowIdx;

Cell cell = new Cell() { CellReference = cellReference };
Row row = sheetData.Elements<Row>().ElementAt((int)rowIdx);

row.InsertAt(cell, i);
worksheetPart.Worksheet.Save();
return cell;
}

最佳答案

啊,找到了。在 InsertSharedString 方法中,

sharedStringPart.SharedStringTable.AppendChild(
new Text(s));

应该是

sharedStringPart.SharedStringTable.AppendChild(
new SharedStringItem(new Text(s)));

关于c# - 使用 Open XML SDK 2.0 将字符串数组作为一行插入到 Excel 文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/997297/

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