Comment Ajuster la colonne d'excel à l'aide d'OpenXML Paquet
Ce code pour générer de la feuille de calcul Excel à l'Aide d'openxml paquet. Plaire à tout le monde de savoir comment ajuster automatiquement sa largeur de colonne.
OpenXmlPackage.SpreadsheetDocument spreadsheetDocument = OpenXmlPackage.SpreadsheetDocument.Create(downloadFilePath, OpenXml.SpreadsheetDocumentType.Workbook);
//Add a WorkbookPart to the document.
OpenXmlPackage.WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
//Add a WorksheetPart to the WorkbookPart.
workbookpart.Workbook = new OpenXmlSpreadsheet.Workbook();
int numDates = datesObject.Length;
//Add Sheets to the Workbook.
OpenXmlSpreadsheet.Sheets sheets = new OpenXmlSpreadsheet.Sheets();
OpenXml.UInt32Value sheetId = 1;
OpenXmlPackage.WorksheetPart firstWorksheetPart = workbookpart.AddNewPart<OpenXmlPackage.WorksheetPart>();
firstWorksheetPart.Worksheet = new OpenXmlSpreadsheet.Worksheet(new OpenXmlSpreadsheet.SheetData());
//Append a new worksheet and associate it with the workbook.
OpenXmlSpreadsheet.Sheet firstSheet = new OpenXmlSpreadsheet.Sheet() { Id = spreadsheetDocument.WorkbookPart.GetIdOfPart(firstWorksheetPart), SheetId = sheetId, Name = "Summary" };
sheets.Append(firstSheet);
sheetId++;
OpenXmlSpreadsheet.SheetData firstSheetData = firstWorksheetPart.Worksheet.GetFirstChild<OpenXmlSpreadsheet.SheetData>();
DataTable summaryTable = new DataTable();
summaryTable.Clear();
summaryTable.Columns.Add("name");
summaryTable.Columns.Add("value");
DataRow _summaryInfo = summaryTable.NewRow();
_summaryInfo["name"] = "Clinic Name";
_summaryInfo["value"] = userInfo[0];
summaryTable.Rows.Add(_summaryInfo);
int firstRowCount = summaryTable.Rows.Count;
for (int rowNumber = 1; rowNumber <= firstRowCount; rowNumber++)
{
DataRow dataRow = summaryTable.Rows[rowNumber - 1];
OpenXmlSpreadsheet.Row contentRow = ExcelHandler.createContentRow(dataRow, rowNumber);
firstSheetData.AppendChild(contentRow);
}
firstWorksheetPart.Worksheet.Save();
OriginalL'auteur Prakash Gupta | 2015-07-03
Vous devez vous connecter pour publier un commentaire.
L'ajustement automatique de la logique est quelque chose qui est mis en œuvre par Microsoft Excel, et n'est pas une partie de la feuille de calcul au format OpenXML. Auto-ajustement consiste à mesurer la largeur (ou hauteur) de la valeur de chaque cellule et de trouver la valeur maximale.
Afin de mettre en œuvre l'auto-ajustement dans votre propre code, vous aurez à mesurer manuellement le texte; vous pouvez utiliser
TextRenderer.MeasureText
ouGraphics.MeasureString
avec format approprié drapeaux (désactiver les caractères de préfixe). Cela vous donnera une taille en pixels, vous aurez besoin de les convertir à d'Excel alambiqué la largeur de la colonne des unités. La formule est la suivante:width = Tronque([{Nombre de Caractères} * {Maximum de la Largeur des Chiffres} + {espacement de 5 pixels}]/{Maximum de la Largeur des Chiffres}*256)/256
Prises à partir de cet article: La Colonne De La Classe (DocumentFormat.OpenXml.Feuille de calcul)
(Maximum la Largeur des Chiffres peut être déterminé par la mesure de la largeur de la
'0'
caractère à l'aide du classeur par défaut de la police vous a dit qu'il était alambiquée!)Une fois que vous avez obtenu les la largeur des cellules à l'aide de cette formule, vous pouvez trouver le maximum de la valeur et de l'appliquer à la
Column.Width
propriété.Il y a de subtiles différences dans la façon dont Microsoft Excel permet d'écrire du texte (par rapport à comment/GDI GDI+), donc cette méthode n'est pas précis à 100% - mais elle est suffisante pour la plupart des fins, et vous pouvez toujours ajouter un peu de rembourrage supplémentaire pour assurer un bon ajustement.
Ce qui ne l'
Truncate
exactement et pourquoi est-il nécessaire?les rejets de la partie décimale du nombre, de manière efficace arrondi à l'entier le plus proche. Ceci est nécessaire parce que les pixels sont exprimées en nombres entiers.
OK, mais le
Column.Width
propriété prend undouble
(je pense en points) et pas unint
pour le pixel...Désolé, mon dernier commentaire a été mal; le
Column.Width
propriété est mesurée dans Excel de la largeur de la colonne des unités (pas de pixels ou de points). Ainsi, leTruncate
fonction est utilisée uniquement parce que Microsoft a décidé de jeter la partie décimale du résultat avant division par 256 - c'est peut-être pour des raisons de précision? De toute façon, il ne fait pas une énorme différence à la figure finale.OriginalL'auteur Bradley Smith