2012-10-29 65 views
7

我試圖在使用OpenXML框架的Excel電子表格中設置默認列寬,結果導致破損的文件。這裏是代碼設置Excel電子表格列屬性問題

private void initSpreadsheetDocument() 
{ 
    // Add a WorkbookPart to the spreadsheet document. 
    WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); 
    workbookpart.Workbook = new Workbook(); 

    var sheetData = new SheetData(); 
    var properties = new SheetFormatProperties { DefaultColumnWidth = 25D }; 

    Worksheet worksheet = new Worksheet(); 
    worksheet.AppendChild(sheetData); 

    // here is line of code that corrupt file 
    // without it - file is being generated properly 
    worksheet.AppendChild(properties); ![enter image description here][1] 

    // Add a WorksheetPart to the WorkbookPart. 
    WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); 
    worksheetPart.Worksheet = worksheet; 

    // Init sheets 
    sheetsStorage = new Sheets(); 

    defaultSheet = new Sheet(); 
    defaultSheet.Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart); 
    defaultSheet.SheetId = 1; 
    defaultSheet.Name = DEFAULT_SHEET_NAME; 

    sheetsStorage.AppendChild(defaultSheet); 

    spreadsheetDocument.WorkbookPart.Workbook.AppendChild(sheetsStorage); 
    spreadsheetDocument.WorkbookPart.Workbook.Save(); 
} 

here是錯誤截圖

我試圖用「附加」與「使用appendChild」,但結果是一樣的

有誰有一個觀點如何排序呢出來嗎?

+0

我無法檢查我的建議,但嘗試使用worksheet.Append(properties);然後工作表。附加(sheetData); 。按此順序。 – Shelest

+0

我剛剛檢查了這個解決方案 - 訂單申請屬性並不重要。無論如何,謝謝你的回覆 –

回答

20

好的。原因是SheetFormatProperties對象有需要屬性defaultRowHeight。你甚至可以指定defaultRowHeight = 0,但它必須出現。所以用

SheetFormatProperties sheetFormatProperties1 = new SheetFormatProperties(){ DefaultColumnWidth = 12.75D, DefaultRowHeight = 0D}; 

並很開心=)СлаваУкраине!

+12

謝謝你的時間 - 這正是我一直在尋找的! ГероямСлава! –

+11

不知道有什麼問題。 Героямслава! – SeniorJD

+6

Героямслава!!! – megas