我有一個修改現有電子表格的程序。該程序的一部分創建特定工作表的副本。要創建一個副本,程序運行良好,生成的文件也很好,在Excel中打開時不會顯示錯誤。但是,在創建相同的工作表的兩個副本時,程序仍然運行得很好,但在Excel中打開時,出現以下錯誤就無法讀取內容:製作多個OpenXML工作表副本的錯誤
Repaired Records: Worksheet properties from /xl/workbook.xml part (Workbook)
這裏是用來執行復制的代碼:
private void CopySheet(int sNum, int pNum, string type)
{
var tempSheet = SpreadsheetDocument.Create(new MemoryStream(), SpreadsheetDocumentType.Workbook);
WorkbookPart tempWBP = tempSheet.AddWorkbookPart();
var part = Document.XGetWorkSheetPart(sNum);
var sheetData = part.Worksheet.ChildElements[5].Clone() as SheetData;
var merge = part.Worksheet.ChildElements[6].Clone() as MergeCells;
WorksheetPart tempWSP = tempWBP.AddPart<WorksheetPart>(part);
var copy = Document.WorkbookPart.AddPart<WorksheetPart>(tempWSP);
//copy.Worksheet.RemoveChild<SheetData>(copy.Worksheet.ChildElements[5] as SheetData);
//copy.Worksheet.InsertAt<SheetData>(sheetData, 5);
//copy.Worksheet.RemoveChild<MergeCells>(copy.Worksheet.ChildElements[6] as MergeCells);
//copy.Worksheet.InsertAt<MergeCells>(merge, 6);
//copy.Worksheet.SheetProperties.CodeName.Value = "Phase" + pNum + type;
var sheets = Document.WorkbookPart.Workbook.Sheets;
var sheet = new Sheet();
sheet.Id = Document.WorkbookPart.GetIdOfPart(copy);
sheet.Name = "Phase " + pNum + " " + type;
sheet.SheetId = (uint)sheets.ChildElements.Count;
sheets.Append(sheet);
}
該方法利用的是.AddPart<>()
執行任何部位的深層副本(和任何它引用)的事實,已經不屬於該文件中,有一個臨時表的幫助下,創建WorkSheet的所有參考部分的深層副本。
如上所述,如果該函數僅針對給定工作表被調用一次,則該工作非常有效。但是,如果它被多次調用,則在Excel中打開文件時會出現無法讀取的內容。這就是說,文件本身似乎很好,沒有丟失數據或任何東西(這將有助於弄清楚究竟是什麼錯誤),只是錯誤說有什麼問題。
被註釋掉的行是我爲解決關於.AddPart<>()
的問題所必須做的「破解」,但我不會在這裏詳細討論它們,因爲我已經發布了關於此here(但我還沒有得到答覆,所以一定要回答這個問題!)。話雖如此,這些線似乎與這個當前的問題沒有關係,因爲錯誤出現有或沒有這些代碼行。
Excel的表示錯誤,同時打開「修理記錄:從/xl/workbook.xml部分(工作簿)工作表屬性」和「刪除了記錄:從/xl/worksheets/sheet14.xml部分細胞信息」,可以你幫我解決? –