关于OpenXml SpreadSheet列宽根据内容的Auto-suitability



using System;
using System.Collections.Generic;
using System.Linq;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet; namespace OpenXmlGenerateExcelTest
{
class Program
{
static void Main()
{
CreateSpreadSheet();
} private static void CreateSpreadSheet()
{
string fileName = "X:\\01.xlsx";
string sheetName = "测试表格sheet—1";
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Create(fileName, SpreadsheetDocumentType.Workbook))
{
spreadSheet.AddWorkbookPart();
spreadSheet.WorkbookPart.Workbook = new Workbook(); WorksheetPart worksheetPart1 = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
worksheetPart1.Worksheet = new Worksheet();
SheetData sheetData = new SheetData();
ProductData(sheetData);
worksheetPart1.Worksheet.AppendChild(AutoFit(sheetData));
worksheetPart1.Worksheet.AppendChild(sheetData); spreadSheet.WorkbookPart.WorksheetParts.ElementAt().Worksheet.Save(); spreadSheet.WorkbookPart.Workbook.AppendChild(new Sheets());
spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>().AppendChild(new Sheet()
{
Id = spreadSheet.WorkbookPart.GetIdOfPart(spreadSheet.WorkbookPart.WorksheetParts.First()),
SheetId = ,
Name = sheetName
}); spreadSheet.WorkbookPart.Workbook.Save();
}
} private static void ProductData(SheetData sheetData)
{
for (uint rowIndex = ; rowIndex < ; rowIndex++)
{
Row row = new Row() { RowIndex = rowIndex };
for (char cellIndex = 'A'; cellIndex < 'F'; cellIndex++)
{
Cell cell = new Cell();
string innerText = "";
cell.CellValue = new CellValue(innerText);
cell.DataType = new EnumValue<CellValues>(CellValues.String);
row.Append(cell);
}
for (char cellIndex = 'F'; cellIndex < 'K'; cellIndex++)
{
Cell cell = new Cell();
string innerText = "";
cell.CellValue = new CellValue(innerText);
cell.DataType = new EnumValue<CellValues>(CellValues.String);
row.Append(cell);
}
sheetData.Append(row);
}
} private static Columns AutoFit(SheetData sheetData)
{
var maxColWidth = GetMaxCharacterWidth(sheetData); Columns columns = new Columns(); double maxWidth = ;
foreach (var item in maxColWidth)
{
/*三种单位宽度公式*/
double width = Math.Truncate((item.Value * maxWidth + ) / maxWidth * ) / ;
double pixels = Math.Truncate((( * width + Math.Truncate( / maxWidth)) / ) * maxWidth);
double charWidth = Math.Truncate((pixels - ) / maxWidth * + 0.5) / ; Column col = new Column() { BestFit = true, Min = (UInt32)(item.Key + ), Max = (UInt32)(item.Key + ), CustomWidth = true, Width = (DoubleValue)width };
columns.Append(col);
}
return columns;
} private static Dictionary<int, int> GetMaxCharacterWidth(SheetData sheetData)
{
Dictionary<int, int> maxColWidth = new Dictionary<int, int>();
var rows = sheetData.Elements<Row>();
foreach (var r in rows)
{
var cells = r.Elements<Cell>().ToArray();
for (int i = ; i < cells.Length; i++)
{
var cell = cells[i];
var cellValue = cell.CellValue == null ? string.Empty : cell.CellValue.InnerText;
var cellTextLength = cellValue.Length;
if (maxColWidth.ContainsKey(i))
{
var current = maxColWidth[i];
if (cellTextLength > current)
{
maxColWidth[i] = cellTextLength;
}
}
else
{
maxColWidth.Add(i, cellTextLength);
}
}
}
return maxColWidth;
}
}
}
关于OpenXml SpreadSheet列宽根据内容的Auto-suitability的更多相关文章
- 转!!Java JTable 根据表格内容 自动调整表格列宽
//根据表格内容 自动调整列宽http://blog.sina.com.cn/s/blog_5e54d6140100s1d3.html
- MS WORD 表格自动调整列宽,自动变漂亮,根据内容自动调整 .
在MS WORD中,当有大量的表格出现时,调整每个表格的的高和宽和大小将是一件非常累的事情,拖来拖去,非常耗时间,而且当WORD文档达到300页以上时,调整反应非常的慢,每次拖拉线后,需要等待一段时间 ...
- MS WORD 表格自己主动调整列宽,自己主动变美丽,依据内容自己主动调整
在MS WORD中,当有大量的表格出现时,调整每一个表格的的高和宽和大小将是一件很累的事情,拖来拖去,很耗时间,并且当WORD文档达到300页以上时,调整反应很的慢,每次拖拉线后,须要等待一段时间其才 ...
- easyui datagrid 列的内容超出所定义的列宽时,自动换行
定义表单 nowrap="false"可以使得列中的内容超出所定义的列宽是就会自动换行pagination : true, // 当true时在DataGrid底部显示一个分页工 ...
- Delphi xe8 FMX StringGrid根据内容自适应列宽。
Delphi xe8 FMX StringGrid根据内容自适应列宽. 网上的资料比较复杂,而且不是根据字体字号等设置列宽.故自己写了个function来用. function GetColMaxDa ...
- WPF学习笔记(3):ListView根据内容自动调整列宽
DataGrid中,只要不设置DataGrid的宽度和列宽度,或者将宽度设置为Auto,那么表格就会根据内容自动调整宽度,以显示所有内容.但如果是ListView,按以上方法设置,却达不到列宽自动调整 ...
- c# listView中列宽随列中的内容自动调整
1.创建一个类 ListViewAutoChange 作用:自动调整ListView的列宽 代码如下:(内容很容易理解,没加注释) using System; using System.Collec ...
- excel 根据单元格内容自动调整列宽
excel 根据单元格内容自动调整列宽 CreateTime--2018年5月28日08:49:40 Author:Marydon 1.情景展示 单元格宽度超过了列宽 2.解决方案 第一步:同时选 ...
- 使用datatables实现列宽设置、水平滚动条、显示某列部分内容
示例 1.//使用 columnDefs 给列设置宽度 $('#example').DataTable( { "columnDefs": [ //给第一列指定宽度为表格整个宽度的2 ...
随机推荐
- 将数组,表的某一列转换为string字符串的方法
样例:字符串数组为array,str为字符串数组转换成的字符串 string[] array = { etr, kdgj, 3454, tyt, gff }; string str=string.Jo ...
- js/css 检测移动设备方向的变化 判断横竖屏幕
js/css 检测移动设备方向的变化 判断横竖屏幕 方法一:用触发手机的横屏和竖屏之间的切换的事件 window.addEventListener("orientationchange&qu ...
- iOS框架介绍
iOS框架介绍 Cocoa Touch GameKit 实现对游戏中心的支持,让用户能够在线共享他们的游戏相关的信息 iOS设备之间蓝牙数据传输 从iOS7开始过期 局域网游 ...
- C#调用WebService实例和开发(转)
1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...
- JSP合用html5 尝试(一)
直接上代码 <%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8" %> ...
- has leaked ServiceConnection com.baidu.location.LocationClient
02-06 05:01:52.806: E/ActivityThread(1120): Activity com.project.xxxActivity $1@45fc5af8 that was or ...
- #event.initMouseEvent
initMouseEvent 方法用于初始化通过 DocumentEvent 接口创建的 MouseEvent 的值.此方法只能在通过 dispatchEvent 方法指派 MouseEvent 之前 ...
- JQ兼容各种JS库的写法
来自为知笔记(Wiz)
- Python之路第十天,高级(2)-多线程,多进程,协程
线程 threading threading模块对象 描述 Thread 表示一个线程的执行对象 Lock 锁原语对象 RLock 可重入锁对象,使单线程可再次获得已经获得了的锁(递归锁定) Cond ...
- SQL Server 内存压力解决方案
外部压力: 表现形式: 1.total server memory ↓ 2.avilable Mbyte 平衡 3.working set ↓ 如果说SQ ...