关于OpenXml SpreadSheet列宽根据内容的Auto-suitability
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关于OpenXml SpreadSheet列宽根据内容的Auto-suitability,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5114字,纯文字阅读大概需要8分钟。
内容图文
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using DocumentFormat.OpenXml; 5 using DocumentFormat.OpenXml.Packaging; 6 using DocumentFormat.OpenXml.Spreadsheet; 7 8 namespace OpenXmlGenerateExcelTest 9 { 10 class Program 11 { 12 static void Main() 13 { 14 CreateSpreadSheet(); 15 } 16 17 private static void CreateSpreadSheet() 18 { 19 string fileName = "X:\\01.xlsx"; 20string sheetName = "测试表格sheet—1"; 21using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Create(fileName, SpreadsheetDocumentType.Workbook)) 22 { 23 spreadSheet.AddWorkbookPart(); 24 spreadSheet.WorkbookPart.Workbook = new Workbook(); 25 26 WorksheetPart worksheetPart1 = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); 27 worksheetPart1.Worksheet = new Worksheet(); 28 SheetData sheetData = new SheetData(); 29 ProductData(sheetData); 30 worksheetPart1.Worksheet.AppendChild(AutoFit(sheetData)); 31 worksheetPart1.Worksheet.AppendChild(sheetData); 32 33 spreadSheet.WorkbookPart.WorksheetParts.ElementAt(0).Worksheet.Save(); 34 35 spreadSheet.WorkbookPart.Workbook.AppendChild(new Sheets()); 36 spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>().AppendChild(new Sheet() 37 { 38 Id = spreadSheet.WorkbookPart.GetIdOfPart(spreadSheet.WorkbookPart.WorksheetParts.First()), 39 SheetId = 1, 40 Name = sheetName 41 }); 42 43 spreadSheet.WorkbookPart.Workbook.Save(); 44 } 45 } 46 47privatestaticvoid ProductData(SheetData sheetData) 48 { 49for (uint rowIndex = 1; rowIndex < 5; rowIndex++) 50 { 51 Row row = new Row() { RowIndex = rowIndex }; 52for (char cellIndex = ‘A‘; cellIndex < ‘F‘; cellIndex++) 53 { 54 Cell cell = new Cell(); 55string innerText = "12234433433"; 56 cell.CellValue = new CellValue(innerText); 57 cell.DataType = new EnumValue<CellValues>(CellValues.String); 58 row.Append(cell); 59 } 60for (char cellIndex = ‘F‘; cellIndex < ‘K‘; cellIndex++) 61 { 62 Cell cell = new Cell(); 63string innerText = "12234"; 64 cell.CellValue = new CellValue(innerText); 65 cell.DataType = new EnumValue<CellValues>(CellValues.String); 66 row.Append(cell); 67 } 68 sheetData.Append(row); 69 } 70 } 71 72privatestatic Columns AutoFit(SheetData sheetData) 73 { 74var maxColWidth = GetMaxCharacterWidth(sheetData); 75 76 Columns columns = new Columns(); 77 78double maxWidth = 7; 79foreach (var item in maxColWidth) 80 { 81/*三种单位宽度公式*/ 82double width = Math.Truncate((item.Value * maxWidth + 5) / maxWidth * 256) / 256; 83double pixels = Math.Truncate(((256 * width + Math.Truncate(128 / maxWidth)) / 256) * maxWidth); 84double charWidth = Math.Truncate((pixels - 5) / maxWidth * 100 + 0.5) / 100; 85 86 Column col = new Column() { BestFit = true, Min = (UInt32)(item.Key + 1), Max = (UInt32)(item.Key + 1), CustomWidth = true, Width = (DoubleValue)width }; 87 columns.Append(col); 88 } 89return columns; 90 } 91 92privatestatic Dictionary<int, int> GetMaxCharacterWidth(SheetData sheetData) 93 { 94 Dictionary<int, int> maxColWidth = new Dictionary<int, int>(); 95var rows = sheetData.Elements<Row>(); 96foreach (var r in rows) 97 { 98var cells = r.Elements<Cell>().ToArray(); 99for (int i = 0; i < cells.Length; i++) 100 { 101var cell = cells[i]; 102var cellValue = cell.CellValue == null ? string.Empty : cell.CellValue.InnerText; 103var cellTextLength = cellValue.Length; 104if (maxColWidth.ContainsKey(i)) 105 { 106var current = maxColWidth[i]; 107if (cellTextLength > current) 108 { 109 maxColWidth[i] = cellTextLength; 110 } 111 } 112else113 { 114 maxColWidth.Add(i, cellTextLength); 115 } 116 } 117 } 118return maxColWidth; 119 } 120 } 121 }
原文:http://www.cnblogs.com/sunxingege/p/4905262.html
内容总结
以上是互联网集市为您收集整理的关于OpenXml SpreadSheet列宽根据内容的Auto-suitability全部内容,希望文章能够帮你解决关于OpenXml SpreadSheet列宽根据内容的Auto-suitability所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。