0

Likely similar post Cell styles in OpenXML spreadsheet (SpreadsheetML) as 劉鎮瑲 said, thanks 劉鎮瑲 and everyone who helped.

Repaired Records: Format from /xl/styles.xml part (Styles)

I don't get this issue. I've generated a .xlsx spreadsheet in C# using the OpenXML SDK, but can't figure out how to get cell styles working. I've been studying files produced by Excel, and can't quite figure out how it's done.

m_objSpreadsheetDocument = SpreadsheetDocument.Create(FileName, SpreadsheetDocumentType.Workbook);
m_objWorkbookPart = m_objSpreadsheetDocument.AddWorkbookPart();
m_objWorkbookPart.Workbook = new Workbook();

// Add a WorksheetPart to the WorkbookPart.
m_objWorksheetPart = m_objWorkbookPart.AddNewPart<WorksheetPart>();
m_objWorksheetPart.Worksheet = new Worksheet(new SheetData());
m_objWorksheet = m_objWorksheetPart.Worksheet;

// Add Sheets to the Workbook.
Sheets sheets = m_objSpreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

// Append a new worksheet and associate it with the workbook.
Sheet sheet = new Sheet()
{
    Id = m_objSpreadsheetDocument.WorkbookPart.GetIdOfPart(m_objWorksheetPart),
    SheetId = 1,
    Name = _sheetName
};
sheets.Append(sheet);

wStylePart = m_objSpreadsheetDocument.WorkbookPart.AddNewPart<WorkbookStylesPart>();

m_objSheetData = m_objWorksheetPart.Worksheet.GetFirstChild<SheetData>();
Waqar Dongre
  • 57
  • 1
  • 6

1 Answers1

0

You can't have a WorkbookStylesPart without setting its Stylesheet. You either need to remove the line

wStylePart = m_objSpreadsheetDocument.WorkbookPart.AddNewPart<WorkbookStylesPart>();

Or you can set its StyleSheet property:

var wStylePart = m_objSpreadsheetDocument.WorkbookPart.AddNewPart<WorkbookStylesPart>();
wStylePart.Stylesheet = new Stylesheet();

Edit

You also need to call Close on the SpreadsheetDocument. You can either add a call to m_objSpreadsheetDocument.Close(); at the bottom of your code or, preferably, you should wrap the call to SpreadsheetDocument.Create in a using statement.

The full code would then look like this:

using (var m_objSpreadsheetDocument = SpreadsheetDocument.Create(file, SpreadsheetDocumentType.Workbook))
{
    var m_objWorkbookPart = m_objSpreadsheetDocument.AddWorkbookPart();
    m_objWorkbookPart.Workbook = new Workbook();

    // Add a WorksheetPart to the WorkbookPart.
    var m_objWorksheetPart = m_objWorkbookPart.AddNewPart<WorksheetPart>();
    m_objWorksheetPart.Worksheet = new Worksheet(new SheetData());
    var m_objWorksheet = m_objWorksheetPart.Worksheet;

    // Add Sheets to the Workbook.
    Sheets sheets = m_objSpreadsheetDocument.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());

    // Append a new worksheet and associate it with the workbook.
    Sheet sheet = new Sheet()
    {
        Id = m_objSpreadsheetDocument.WorkbookPart.GetIdOfPart(m_objWorksheetPart),
        SheetId = 1,
        Name = "Sheet 1"
    };
    sheets.Append(sheet);

    //either both of these lines are required or neither of them; you can't add the WorkbookStylesPart alone
    var wStylePart = m_objSpreadsheetDocument.WorkbookPart.AddNewPart<WorkbookStylesPart>();
    wStylePart.Stylesheet = new Stylesheet();

    var m_objSheetData = m_objWorksheetPart.Worksheet.GetFirstChild<SheetData>();
}
petelids
  • 12,305
  • 3
  • 47
  • 57
  • still not working, Repaired Records: Cell information from /xl/worksheets/sheet.xml part and Repaired Records: Format from /xl/styles.xml part (Styles) – Waqar Dongre Oct 03 '16 at 08:59
  • @MohdWaqar, please see my edit. That code works without issue for me. – petelids Oct 03 '16 at 11:06