How to format cells in Excel using open XML

I am using OpenXML to manipulate Excel files.

I am sending the Excel files as memory stream from SharePoint, and editing them: ie inserting a new worksheet and adding some data from SharePoint to that newly inserted workssheeet. The memorystream is then sent to the browser so it opens in the client office program.

I can insert a new sheet and add data to the cells from other resources, but I am having problems formatting the cells. Like making them bold, changing font and color etc. I have tried the approach as descbribed here, but it messes up all the other sheets in my workbook because the style is then overwritten.

https://blogs.msdn.microsoft.com/chrisquon/2009/11/30/stylizing-your-excel-worksheets-with-open-xml-2-0/

How can I add my own style, and apply them to my cells without overwriting the style of the other sheets. This is my code:

private static void BuildWorkSheet(WorksheetPart worksheetPart, SharedStringTablePart shareStringPart)
{
    // Insert the text into the SharedStringTablePart.
    var docTypeIndex = InsertSharedStringItem("Dokumenttype", shareStringPart);         
    var titleIndexindex = InsertSharedStringItem("TITTEL ", shareStringPart);
    var docIdIndex = InsertSharedStringItem("Dokument-ID:", shareStringPart);
    var confidencialityIndex = InsertSharedStringItem("Konfidensialitet:", shareStringPart);

    // Insert cell A1 into the new worksheet.
    var docTypeCell = InsertCellInWorksheet("A", 3, worksheetPart);
    var titleCell = InsertCellInWorksheet("A", 4, worksheetPart);
    var docIdCell = InsertCellInWorksheet("A", 6, worksheetPart);
    var confidencialityCell = InsertCellInWorksheet("A", 7, worksheetPart);

    // Set the value of cells
    titleCell.CellValue = new CellValue(titleIndexindex.ToString());
    titleCell.DataType = new EnumValue<CellValues>(CellValues.SharedString);

    docTypeCell.CellValue = new CellValue(docTypeIndex.ToString());
    docTypeCell.DataType = new EnumValue<CellValues>(CellValues.SharedString);

    docIdCell.CellValue = new CellValue(docIdIndex.ToString());
    docIdCell.DataType = new EnumValue<CellValues>(CellValues.SharedString);

    confidencialityCell.CellValue = new CellValue(confidencialityIndex.ToString());
    confidencialityCell.DataType = new EnumValue<CellValues>(CellValues.SharedString); 
}

// Given a WorkbookPart, inserts a new worksheet.
private static WorksheetPart InsertWorksheet(WorkbookPart workbookPart)
{
    // Add a new worksheet part to the workbook.
    WorksheetPart newWorksheetPart = workbookPart.AddNewPart<WorksheetPart>();
    newWorksheetPart.Worksheet = new Worksheet(new SheetData());
    newWorksheetPart.Worksheet.Save();

    Sheets sheets = workbookPart.Workbook.GetFirstChild<Sheets>();
    string relationshipId = workbookPart.GetIdOfPart(newWorksheetPart);

    // Get a unique ID for the new sheet.
    uint sheetId = 1;
    if (sheets.Elements<Sheet>().Count() > 0)
    {
        sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
    }

    string sheetName = "Sheet" + sheetId;

    // Append the new worksheet and associate it with the workbook.
    Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };

    //sheets.Append(sheet);
    var firstChild = sheets.FirstChild;
    sheets.InsertBefore(sheet, firstChild);           

    workbookPart.Workbook.Save();       

    return newWorksheetPart;
}


// Given text and a SharedStringTablePart, creates a SharedStringItem with the specified text
// and inserts it into the SharedStringTablePart. If the item already exists, returns its index.
private static int InsertSharedStringItem(string text, SharedStringTablePart shareStringPart)
{
    // If the part does not contain a SharedStringTable, create one.
    if (shareStringPart.SharedStringTable == null)
    {
        shareStringPart.SharedStringTable = new SharedStringTable();
    }

    int i = 0;

    // Iterate through all the items in the SharedStringTable. If the text already exists, return its index.
    foreach (SharedStringItem item in shareStringPart.SharedStringTable.Elements<SharedStringItem>())
    {
        if (item.InnerText == text)
        {
            return i;
        }

        i++;
    }

    // The text does not exist in the part. Create the SharedStringItem and return its index.
    shareStringPart.SharedStringTable.AppendChild(new SharedStringItem(new DocumentFormat.OpenXml.Spreadsheet.Text(text)));
    shareStringPart.SharedStringTable.Save();

    return i;
}
链接地址: http://www.djcxy.com/p/27766.html

上一篇: OpenXML:更新Word文档中的嵌入式Excel

下一篇: 如何使用开放XML在Excel中格式化单元格