Erstellen von benutzerdefinierten Spaltenbreiten in OpenXML (excel)
Ich bin neu in OpenXML - (v. 2.5), und ich kann schaffen, Zeilen und Zellen, aber ich muss in der Lage sein, die Spaltenbreite und ich kann das nicht richtig aus irgendeinem Grund.
Ohne diesen code:
Columns cols = new Columns();
Column c1 = new Column()
{
CustomWidth = true,
Width = 20
};
cols.Append(c1);
wspart.Worksheet.Append(cols);
Läuft das Programm und generiert eine excel-Datei fein.
Den code unten hält und läuft, aber lässt mich mit einem beschädigten excel-Dokument. Was mache ich falsch, wenn ich versuche, Sie zu Spalten hinzufügen?
public static void createExcel() //TODO change to private
{
//create the spreadsheet document with openxml See https://msdn.microsoft.com/en-us/library/office/ff478153.aspx
SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Create(@"C:\Users\Reid\Documents\BLA\test.xlsx", SpreadsheetDocumentType.Workbook); //TODO change path
//add a workbook part
WorkbookPart wbpart = spreadsheetDoc.AddWorkbookPart();
wbpart.Workbook = new Workbook();
//add a worksheet part
WorksheetPart wspart = wbpart.AddNewPart<WorksheetPart>();
Worksheet ws = new Worksheet(new SheetData());
wspart.Worksheet = ws;
//create a new sheets array
Sheets sheets = spreadsheetDoc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
//create a new sheet
Sheet sheet = new Sheet()
{
Id = spreadsheetDoc.WorkbookPart.GetIdOfPart(wspart),
SheetId = 1,
Name = "mySheet" //TODO change name
};
//add the sheet to the workbook sheet aray
sheets.Append(sheet);
SheetData shData = wspart.Worksheet.GetFirstChild<SheetData>();
//////////////////////////////////row and col widths//////////////////////
Columns cols = new Columns();
Column c1 = new Column()
{
CustomWidth = true,
Width = 20
};
cols.Append(c1);
wspart.Worksheet.Append(cols);
//create the first row
Row r1 = new Row
{
RowIndex = 1,
CustomHeight = true,
Height = 71.25 //change height based on info
};
shData.Append(r1);
////////////////////////cell data/////////////////////////////////
//In the new row, find the column location to insert a cell in A1.
Cell refCell = null;
foreach (Cell cell in r1.Elements<Cell>())
{
if (string.Compare(cell.CellReference.Value, "A1", true) > 0)
{
refCell = cell;
break;
}
}
//Add the cell to the cell table at A1.
Cell newCell = new Cell() {
CellReference = "A1",
};
r1.InsertBefore(newCell, refCell);
//Set the cell value to be a numeric value of 100.
newCell.CellValue = new CellValue("100");
//TODO add in standard things (text that is always the same, headers, logos, etc.)
//TODO add in dynamic text
//TODO create and add in barcodes
//Save and close the document
wbpart.Workbook.Save();
spreadsheetDoc.Close();
//TODO send document to database
}
InformationsquelleAutor Reid | 2015-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das problem, Sie mit in ist das erstellen und Anhängen eines NEUEN Spalten-element auf dem vorhandenen Arbeitsblatt Inhalt. Ich glaube, Sie müssen fügen Sie die neue Spalte zu einer vorhandenen Spalten-element.
Erstellte ich eine Arbeitsmappe gespeichert wird, hinzugefügten Inhalt in eine leere Spalte, dann die Arbeitsmappe gespeichert, unter einem neuen Namen und es geschlossen.
Unter Verwendung des Open XML SDK 2.5 Produktivitäts-Tool "Compare" Funktion, die ich ausgewählt das Arbeitsblatt Teil mit dem Unterschied, ausgewählt, dann auf "Ansicht" Paket-Code". Der code, der generiert wird die geänderte Datei mit der neuen Spalte aus der ursprünglichen Datei zeigt mir:
Beachten Sie, dass es scheint, Sie sind auch zu erwarten, um die Spalte festzulegen, die Reichweite der neuen Spalte.
InformationsquelleAutor Cindy Meister
Die ausgewählte Antwort oben leider nicht mein Problem behoben, aber ich fand es schließlich heraus. Das Problem für mich war, als ich die Zeile:
Columns columns1=worksheet1.GetFirstChild<Columns>();
gibt es derzeit keineColumns
Kinder in dem Arbeitsblatt, so ist das zurückgegebene Objekt war null, und ich bekam einen runtime error, wenn ich habe versucht, anfügen einer Spalte, um dieColumns
Objekt.Das Problem ist, dass Excel extrem wählerisch. Das Spalten-element in der tatsächlichen sheet.xml die Datei muss vor dem sheetdata-element. Hinzufügen möchten meine benutzerdefinierten Spalten in das Arbeitsblatt führte zu einer beschädigten Datei durch die Platzierung der Spalten-element nach der sheetdata-element. Da ich wusste, es musste sein, bevor das sheetdata-element musste ich stecken Sie es in den Anfang des Arbeitsblatts und nicht hängen Sie an das Arbeitsblatt. Hier ist der code, der bei mir funktioniert:
Hoffe, das hilft jemandem!!
Noten sind geschätzt, aber anscheinend haben Sie nicht gelesen haben, meine ganze Antwort. Ich eigentlich sagen in meinem zweiten Absatz.
InformationsquelleAutor compman2408