1


0

コードは実行されますが、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);

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

セルcell = InsertCell(i、rowIdx、worksheetPart); cell.CellValue = new CellValue(stringIdx.ToString()); cell.DataType = new EnumValue(CellValues.SharedString);

worksheetPart.Worksheet.Save(); }}}

private SharedStringTablePart GetSharedStringPart(SpreadsheetDocument doc){if(doc.WorkbookPart。 GetPartsCountOfType()> 0)doc.WorkbookPartを返します。 GetPartsOfType()。First();それ以外の場合はdoc.WorkbookPartを返します。 AddNewPart(); }

プライベートuint AppendRow(WorksheetPart worksheetPart){SheetData sheetData = worksheetPart.Worksheet。 GetFirstChild();

uint rowIndex =(uint)sheetData.Elements()。Count();

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

rowIndexを返します。 }

private int InsertSharedString(文字列s、SharedStringTablePart sharedStringPart){if(sharedStringPart.SharedStringTable == null)sharedStringPart.SharedStringTable = new SharedStringTable();

int i = 0。

foreach(sharedStringPart.SharedStringTable内のSharedStringItemアイテム。 Elements()){if(item.InnerText == s)はiを返します。
            ++i;
}

sharedStringPart.SharedStringTable.AppendChild(新しいテキスト); sharedStringPart.SharedStringTable.Save();

iを返します。 }

プライベートセルInsertCell(int i、uint rowIdx、WorksheetPart worksheetPart){SheetData sheetData = worksheetPart.Worksheet。 GetFirstChild();ストリングcellReference = AlphabetMap.Instance [i] rowIdx;

セルcell = new Cell(){CellReference = cellReference};行row = sheetData.Elements()。ElementAt((int)rowIdx);

row.InsertAt(cell、i); worksheetPart.Worksheet.Save();セルを返す。 }

1 Answer


2


ああ、見つけました。 InsertSharedStringメソッドでは、

sharedStringPart.SharedStringTable.AppendChild(新しいテキスト);

あるべき

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