同一个excel文件在不同电脑上打印高度不同的原因

6 篇文章 0 订阅

       因为最近甲方领导对excel导出的文件要求比较高,所以发现这个问题,同一个excel表格,在领导电脑上打印是一页刚刚好,而在其他人的电脑上打印则超过了一页。

一开始我们想到了几种可能的原因:

1、页面缩放

2、页边距设置

3、打印机设置

4、excel选项-默认字体设置

5、excel选项-标尺设置

6、不同excel版本问题

结果试了以后都不是这些原因导致的。后来经公司总部excel专家指导,发现是电脑dpi设置问题导致的,跟excel无关。

设置地方:控制面板-所有控制面板项-显示。如下图

我们正常的显示都是100%(默认)也就是dpi为96,而甲方领导因为大屏幕字太小说,所以自己设置为125%,也就是dpi为120。所有导致了同一个excel在不同电脑上打印效果不同。

下面是我们测试的经过

测试一:
环境
office 2007, win7 x64
excel标尺单位:毫米
excel页边距,上,下,左,右均为10mm,页眉页脚为10mm
dpi:每英寸96像素(即系统默认设置100%)
测试过程
1、新建一个excel表格,并且设置为刚好一页。记录表格宽度和高度,如下图。

2、调整系统dpi为每英寸120像素(即125%),然后打开之前创建的excel表格,宽度和高度变成如下图所示。

 

另一个测试是反过来测试的,方法差不多,这里就不熬述了。在不同dpi设置下面的打印效果如下图(左边的是dpi为96的打印效果,右边是dpi为120的打印效果,高度还是差很多的)

        那么这个问题是windows系统导致的,应该算是windows跟excel的一个bug吧。但是甲方领导不依不饶一定要解决这个问题(公司公关没做到位,坑的都是我们程序猿啊~),刚开始我们使用的pdf来替代excel的办法作为解决方案,使用OpenOffice插件在服务器端把excel转为pdf然后导出,经过测试这个方案没有问题,结果上甲方的测试系统时,问题来了~,甲方的服务器是AIX。OpenOffice根本没有提供AIX的插件包。。。后来又想了另一种折中方案,就是OpenOffice安装在另一台Linux服务器上,AIX服务器上的系统去调用OpenOffice所在的这台机器,这样的方案也是可以实现,结果甲方又是担心出问题,不同意这个方案。最后还是我们领导想出了一个解决办法,就是在jsp页面用js调用ActiveXObject读取客户端的注册表,然后判断客户端是那种dpi,代码如下

var dpiVal=96;
try{
   var shell=new ActiveXObject("WScript.Shell");
   var reginfo="HKEY_CURRENT_USER\\Control Panel\\Desktop\\WindowMetrics\\AppliedDPI" 
   dpiVal=shell.RegRead(reginfo);
}catch(e){
   dpiVal=96;
}

这样我们在服务端做了2个excel模板来满足不同dpi设置,这样的结果是只能在ie浏览器上使用,而且把站点加入受信任站点,然后自定义级别,设置如下


这样终于把问题解决了,甲方领导也同意这样的方案。

 

下面附上跟微软400客服沟通的记录,以及msdn微软工程师的回复

与微软客户400电话沟通记录

20141010星期五 1715

致电4008203800

微软回复:需要正版许可才能获得技术支持。

20141011星期六 1048

致电4008203800

提供正版序列号。

微软回复:需要企业服务协议号才能获得技术支持。

20141013星期一 1407

致电4008203800

提供企业服务协议号,说明所遇到的问题。

微软回复:超出免费服务范围,需要有偿服务才能获得技术支持。

======================================================================

微软excel论坛微软工程师Johns Wu的回复

您好,

DPI是每英寸象素数,DPI不同显示效果是有差别的,这也是正常情况。(打印尺寸越大DPI越低)

通常打印效果受像素、分辨率等有关。例如照片的DPI一般是固定的,比如大多数机器都设定为72,那么600万象素的照片长是3400象素,每英寸72象素,那么打印出来就是长47英寸,合119厘米,大约1.2米。这种情况通常不现实,所以要调高DPI值或者减小照片分辨率,以达到最佳尺寸。

“打印尺寸”与影像分辨率有莫大的关系,只要影像分辨率改变了,打印的尺寸便会跟着变化,而像素和影像分辨率又有直接的关系,所以三者可以互相转换的。而其中最根本的就是像素了。

=======================================================================

excel帮助文档关于excel列宽不同的解释

大多数打印机提供了比计算机屏幕 (96 dpi) 变得更高的分辨率 (300 或 600 点 / 英寸)。因此,不同打印输出呈现在屏幕上显示的信息。当选择一列或行,并使用自动调整命令时在屏幕使用该字体规格不同于打印机使用的该度量值 ; 某些字体的有些字符可能会使用小数的值。  

例如对于一种字体可能会报告 9.1 的像素,但它无法处理小数部分的多显示器驱动程序是舍入为最接近的整像素值量。在此的示例 9.1 像素被舍入,向下为 9.0 像素为单位)。更高分辨率打印机呈现打印预览中的视图中,或当打印工作表时,将使用时, 字符可能会打印在 9.1 像素的分辨率。因为基于圆角的整数值计算列的宽度,打印的输出的列是宽度的不同于显示的列的宽度。使用自动调整命令来调整列中包含长文本字符串,这种差异时尤其明显。  

 

 

 

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要实现Excel文件只能在一个电脑上绑定的方法,可以通过以下步骤来实现: 1. 通过VBA代码获取当前电脑的硬件ID,例如CPU序列号、硬盘序列号等,代码如下: ``` '获取CPU序列号 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor") For Each objItem in colItems strCPUID = objItem.ProcessorID Next '获取硬盘序列号 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_DiskDrive") For Each objItem in colItems strHDDID = objItem.SerialNumber Next ``` 2. 在Excel文件打开时,通过VBA代码判断当前电脑的硬件ID是否与Excel文件中存储的ID一致,如果不一致,则关闭Excel文件,代码如下: ``` Private Sub Workbook_Open() Dim strCPUID As String Dim strHDDID As String Dim strFileID As String '获取当前电脑硬件ID '... '获取Excel文件中存储的硬件ID strFileID = ThisWorkbook.Worksheets("Sheet1").Range("A1").Value '判断硬件ID是否一致 If strCPUID <> strFileCPUID Or strHDDID <> strFileHDDID Then '如果不一致,关闭Excel文件 Application.Quit End If End Sub ``` 3. 在第一次打开Excel文件时,将当前电脑的硬件ID保存在Excel文件中,代码如下: ``` Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim strCPUID As String Dim strHDDID As String '获取当前电脑硬件ID '... '将硬件ID保存在Excel文件中 ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = strCPUID ThisWorkbook.Worksheets("Sheet1").Range("B1").Value = strHDDID End Sub ``` 这样,只有在绑定的电脑上打开该Excel文件才能正常使用,其他电脑打开时会关闭文件。注意,这种方法也只能起到一定的保护作用,不能完全防止文件被其他人打开和修改。另外,不同型号的电脑硬件ID可能会不同,需要根据实际情况进行调整。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值