【EPplus】Column width discrepancy
description
I have noticed that when I set a column width there is a
discrepancy between the width that I set in code and what
Excel reports.
From the code below, Excel reports the width to be 11.27.
Excel reports the height to be exactly what I set.
oSheet.Column(1).Width = 12.0d;
oSheet.Row(1).Height = 27.75d;
Duardo
Anyway, I can't change it since a lot of people use it.
comments
TomDierickx wrote Apr 9, 2012 at 8:32 PM
So, for X >= 1.667, you will probably see a true column width of [ROUND(7 * (X - 1/256)) - 5] / 7 rounding this to two decimal places. For example, let's say you try setting the column width to 10 (i.e. X=10), then you will likely really see a value of "ROUND(7 * (10 - 1/256))" = 70 - 5 = 65 / 7 = 9.29
One workaround that seems to work for a variety of sample widths is to create a custom function to "adjust up" the value you think you're setting by an amount that will result in a net value to get you as close as possible (to the nearest 1/7th if > 1.6667 or to the nearest 1/2th if < 1.6667):
oSheet.Column(1).Width = 10 'really ends up being 9.29
oSheet.Column(2).Width = SetTrueColumnWidth(10) ' really ends up being 10.00
where the following function takes your desired column width and modifies it by enough such that the net result of setting the column width will actually end up being what you want it to be:
Private Function SetTrueColumnWidth(ByVal dblWidth As Double) As Double
'DEDUCE WHAT THE COLUMN WIDTH WOULD REALLY GET SET TO
Dim z As Double = 1
If (dblWidth >= (1 + 2 / 3)) Then
z = Math.Round((Math.Round(7 * (dblWidth - 1 / 256), 0) - 5) / 7, 2)
Else
z = Math.Round((Math.Round(12 * (dblWidth - 1 / 256), 0) - Math.Round(5 * dblWidth, 0)) / 12, 2)
End If
'HOW FAR OFF? (WILL BE LESS THAN 1)
Dim errorAmt As Double = 0
errorAmt = dblWidth - z
'CALCULATE WHAT AMOUNT TO TACK ONTO THE ORIGINAL AMOUNT TO RESULT IN THE CLOSEST POSSIBLE SETTING
Dim adjAmt As Double = 0
If (dblWidth >= (1 + 2 / 3)) Then
adjAmt = (Math.Round(7 * errorAmt - 7 / 256, 0)) / 7
Else
adjAmt = ((Math.Round(12 * errorAmt - 12 / 256, 0)) / 12) + (2 / 12)
End If
'RETURN A SCALED-VALUE THAT SHOULD RESULT IN THE NEAREST POSSIBLE VALUE TO THE TRUE DESIRED SETTING
If (z > 0) Then
Return dblWidth + adjAmt
Else
Return 0
End If
End Function
grimmdp wrote Apr 2, 2013 at 1:42 PM
Thanks a bunch for posting this, it helped me a ton. Here it is in C# for anyone who need it:
Dean
public static double GetTrueColumnWidth(double dblWidth)
{
//DEDUCE WHAT THE COLUMN WIDTH WOULD REALLY GET SET TO
double z = 1d;
if (dblWidth >= (1 + 2 / 3))
z = Math.Round((Math.Round(7 * (dblWidth - 1 / 256), 0) - 5) / 7, 2);
else
z = Math.Round((Math.Round(12 * (dblWidth - 1 / 256), 0) - Math.Round(5 * dblWidth, 0)) / 12, 2); //HOW FAR OFF? (WILL BE LESS THAN 1)
double errorAmt = dblWidth - z; //CALCULATE WHAT AMOUNT TO TACK ONTO THE ORIGINAL AMOUNT TO RESULT IN THE CLOSEST POSSIBLE SETTING
double adjAmt = 0d;
if (dblWidth >= (1 + 2 / 3))
adjAmt = (Math.Round(7 * errorAmt - 7 / 256, 0)) / 7;
else
adjAmt = ((Math.Round(12 * errorAmt - 12 / 256, 0)) / 12) + (2 / 12); //RETURN A SCALED-VALUE THAT SHOULD RESULT IN THE NEAREST POSSIBLE VALUE TO THE TRUE DESIRED SETTING
if (z > 0)
return dblWidth + adjAmt;
return 0d; }
redaxe wrote Jul 28, 2013 at 8:38 AM
only one issue 3.5 is being calculated as 3.57 but its fine for me. :)
Christophe_ wrote Jan 7, 2015 at 9:07 AM
【EPplus】Column width discrepancy的更多相关文章
- 【动态规划】Column Addition @ICPC2017Tehran/upcexam5434
时间限制: 1 Sec 内存限制: 128 MB 题目描述 A multi-digit column addition is a formula on adding two integers writ ...
- 【理解】column must appear in the GROUP BY clause or be used in an aggregate function
column "ms.xxx_time" must appear in the GROUP BY clause or be used in an aggregate functio ...
- 【Flask】Column常用参数
### Column常用参数:1. primary_key:设置某个字段为主键.2. autoincrement:设置这个字段为自动增长的.3. default:设置某个字段的默认值.在发表时间这些字 ...
- 【CSS】思考和再学习——关于CSS中浮动和定位对元素宽度/外边距/其他元素所占空间的影响
一.width:auto和width:100%的区别 1.width:100%的作用是占满它的参考元素的宽度.(一般情况下参考元素 == 父级元素,这里写成参考元素而不是父级元素,在下面我会再 ...
- 【CSS】元素样式
1.使用CSS的三种方式: 方式一.通过元素的style属性来设置元素的样式 方式二.在HTML头部标签<head>中通过<link>标签引入一个外部的CSS资源,通常是一个C ...
- 【LeetCode】树(共94题)
[94]Binary Tree Inorder Traversal [95]Unique Binary Search Trees II (2018年11月14日,算法群) 给了一个 n,返回结点是 1 ...
- 【Discuz】-QQ互联登陆提示错误信息:Unknown column 'conuintoken' in 'field list'
提示信息 discuz! Database Error(1054) Unknown column 'conuintoken' in 'field list'REPLACE INTO common_co ...
- 【LeetCode-面试算法经典-Java实现】【168-Excel Sheet Column Title(Excell列标题)】
[168-Excel Sheet Column Title(Excell列标题)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a positive in ...
- 【转】Hive 修改 table、column
表 1.重命名表重命名表的语句如下: ALTER TABLE table_name RENAME TO new_table_name 2.修改表属性: ALTER TABLE table_name S ...
随机推荐
- install ios开发环境
环境搭建参照下边这个网址: http://itbbs.pconline.com.cn/soft/50602805.html
- QT笔记之模态对话框及非模态对话框
模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...
- visual studio运行时库MT、MTd、MD、MDd的研究(转载)
转载:http://blog.csdn.net/ybxuwei/article/details/9095067 转载:http://blog.sina.com.cn/s/blog_624485f701 ...
- C++,利用链式栈实现括号匹配,界面友好,操作方便,运行流畅
#include<iostream> #include<string> using namespace std; struct Node { char ch; Node* ne ...
- CSS3教程链接
下面列出本站关于CSS3的相关链接,以方便大家阅读: 第一节:<CSS3 Gradient> 第二节:<CSS3 RGBA> 第三节:<CSS3 Border-radiu ...
- linux phpstorm安装和激活方法
安装方法:http://www.linuxdiyf.com/linux/19328.html 激活方法:http://www.cnblogs.com/buyucoder/p/5291771.html ...
- CentOS 6.5 64位 安装zabbix-2.2.0
安装环境: VM 10 + CentOS-6.5-x86_64-minimal 虚拟机网络是NAT方式, 动态IP Xshell登录到Centos操作 刚装的centos,啥都没有,先配一下yum 首 ...
- monkey基本命令参数详解示例
Monkey基本命令参数 参数名 基本功能 举例 -p 参数-p用于约束限制,用此参数指定一个或多个包(Package,即App).指定 包之后,Monkey将只允许系统启动指定的APP.如果不指定包 ...
- cocos2d-x 3.X (二)创建动起来的精灵
[参考文章]http://www.cnblogs.com/suguoqiang/archive/2013/04/03/2997316.html 在HelloWorldScene.h中声明void ro ...
- iOS - MVP 架构模式
1.MVP 从字面意思来理解,MVP 即 Modal View Presenter(模型 视图 协调器),MVP 实现了 Cocoa 的 MVC 的愿景.MVP 的协调器 Presenter 并没有对 ...