1,什么是默认字体

新建工作簿时的字体就是默认字体。

2003(XP系统)默认字体设置:

2010(Win7系统)默认字体设置:

2,宽度相同时,像素值相同吗?

在excel2003以上的版本中,可以建立一个空白的xls文档并将第一列宽度拉到10。然后在A1单元格中输入1234567890可以看到单元格正好可以容纳这十个字符。一个字符的宽度是通过测量1234567890这十个字符在默认字体(通常是宋体11号字,视版本可能不同)下的平均宽度得到的。

宋体11号字:

宋体18号字:

这两张图片中的宽度都为10,且正好容纳下1~0十数字,但是它们的宽度像素值却不相同。

3,宽度的像素值是如何计算的?

上图是我做的一张表格,里面包含一些常见的字体和它们在Excel中的实测宽度(2003和2010测试结果相同)

这张图说明了几个问题:

一、字符像素宽度 = 字体宽度 * 字符个数 + 边距

例如宋体11号字,字体宽度8,边距5,计算10个字符的实际像素值: 8 * 10 + 5 = 85;

二、不同的字体,字体宽度和边距是不同的

三、网上到处流传的拿字体宽度8边距5 进行像素计算的,就是因为EXCEL2003的默认字体为宋体12,EXCEL2010默认字体为11,而它们的参数正好相同。一旦客户某天改了默认字体,新建了个Excel文件,你的程序就可能不对了。

四、Arial 10字体很重要,因为它是Apache POI中所有关于像素计算的默认字体。用POI创建出来的EXCEL就是这个字体。有时你可能要精确设置列宽度,或者用POI往EXCEL里面插入一张图片还要进行精确定位,你就必须要知道这个默认字体的问题。

如果你用POI新建Excel文件,那么参数就是7和5

如果你用预先画的EXCEL文件打印报表之类的操作,你就要看它的默认字体是什么了。

5,怎么看EXCEL文件中的默认字体是什么?

我用的POI代码查看的,其他方法暂时不知道,有知道的朋友请指导。

注:第0个字体就是默认字体

public static void main(String[] args) throws IOException {File xlsFile = new File("d:\\1.xls");HSSFWorkbook book = new HSSFWorkbook(new FileInputStream(xlsFile));HSSFFont font = book.getFontAt((short)0);System.out.println(font.getFontName() + font.getFontHeightInPoints());}

6,怎么使用POI修改Excel文件的默认字体?

这个暂时不知道,有知道的朋友请指导。

7,解决方案呢?

解决方案1:使用POI创建的EXCEL文件,请使用参数7和5,用第3条中的公式计算宽度即可。

解决方案2:把常用的EXCEL文件用代码扫描一下看看默认字体是什么

import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class ReadFont {public static void main(String[] args) {//扫描目录下的所有XLS文件File rootDir = new File("D:\\test");List<File> files = collectionFiles(rootDir);System.out.println("共有EXCEL文件:" + files.size() + "个");Map<String, Integer> counts = new HashMap<String, Integer>();for (File xlsFile : files) {String font = readFont(xlsFile);Integer c = counts.get(font);if(c == null){c = 0;}counts.put(font, c + 1);}for (Entry<String, Integer> entry : counts.entrySet()) {System.out.println(entry.getKey() + "  =  " + entry.getValue());}}private static String readFont(File xlsFile) {HSSFWorkbook book = null;try {book = new HSSFWorkbook(new FileInputStream(xlsFile));} catch (Exception e) {throw new RuntimeException(e);}HSSFFont font = book.getFontAt((short)0);return font.getFontName() + font.getFontHeightInPoints();}private static List<File> collectionFiles(File rootDir) {List<File> result = new LinkedList<File>();collectionFiles(rootDir, result);return result;}private static void collectionFiles(File rootDir, List<File> result) {for (File f : rootDir.listFiles()) {if(f.isDirectory()){collectionFiles(f, result);}else if(f.getName().endsWith(".xls")){result.add(f);}}}}

个人测试结果如下:

共有EXCEL文件:213个

宋体12  =  112

宋体11  =  54

Arial10  =  31

宋体10  =  14

仿宋_GB231212  =  1

宋体8  =  1

可以人看出常用字体大概在3、4种左右,只需根据第2条,用EXCEL实际测量一下就可以算出参数。然后究竟是写配置文件,还是定义个常量,请随意。

8,有没有办法直接从字体、字号算出字符宽度、边距这两个参数呢?

激动人心的时刻到来了,但我还是留个坑吧,如有需要请留言。

Excel的宽度怎么算的?相关推荐

  1. 计算机函数sumif求平均值,『如何用sumif求平均年龄』excel表中如何算平均数及标准差...

    怎样在Excel中计算所有人的平均年龄??! 在旁边插入一列G,写=DATEDIF(F2,NOW(),"y"),F2是出生年月日.然后下拉. 在旁边的单元格写=average(G: ...

  2. oracle算加权平均的函数,怎样在Excel表中用函数算加权平均数?《电子表格加权平均函数》...

    怎样在Excel表中用函数算加权平均数? 例子:学校末成绩,考30%,期末考试占50 %,假如期中考试得了84,期末92,作业分91,在A列输入考试成绩依次为84.92.91:在B列依次输入0.3.0 ...

  3. 在EXCEL中将地址解算为经纬度、地图标绘、并导出ShapeFile

    在EXCEL中使用小O地图EXCEL版的地图任务功能,实现将文字地址解算为经纬度坐标: 使用地图绘图功能,将经纬度标注地图之上,并将表格记录行信息作为图形属性: 使用地图绘图管理器,保存绘图,并可将图 ...

  4. 办公软件excel表格_钢筋算量Excel表格,现场算钢筋,效率可与大型软件相比

    提起钢筋算量,工作很久造价和施工恐怕都要挠头,对于刚入行的造价和施工都可以说是灾难.不过不用担心,我今天就是来给大家送解决方法--钢筋算量Excel表格. 钢筋算量Excel表格基本包含了钢筋算量的全 ...

  5. excel变异系数CV怎么算

    变异系数(Coefficient of Variation):当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大,或者数据量纲的不同,直接使用标准差来进行比较不合适,此时就应当消除测 ...

  6. python输入随机的口算算式_小学生家长的福利来啦--利用EXCEL随机生成口算题目...

    原标题:小学生家长的福利来啦--利用EXCEL随机生成口算题目 刚上一年级或者二年级的家长都会有这样的一个纠结:数学老师布置作业,要求家长给小孩出口算题目,并批阅.辛辛苦苦想了好久,总算把题目出完了, ...

  7. excel使用教程_造价老师傅整理:广联达安装算量教程+Excel表,造价算量不再难...

    造价老师傅整理:广联达安装算量教程+Excel表,造价算量不再难 这份资料分为两部分:一部分是广联达安装算量教程,另一部分是Excel自动计算表.两部分相结合使用,造价算量更容易. 广联达安装算量教程 ...

  8. 计算机表格最高分,excel表格里怎样算最高分 excel各个班的最高分

    在Excel中录入好数据以后进行数据统计,再统计过后多数需要算出最高值得,有些朋友可能不太会求最高值,接下来是小编为大家带来的excel如何求最高值的方法,欢迎大家来到学习. excel表格算最高分的 ...

  9. 计算机表格最高分,excel表格里怎样算最高分

    在Excel中录入好数据以后进行数据统计,再统计过后多数需要算出最高值得,有些朋友可能不太会求最高值,接下来是学习啦小编为大家带来的excel如何求最高值的方法,欢迎大家来到学习啦学习. excel表 ...

最新文章

  1. 信息学奥赛一本通 1179:奖学金 | 1938:【07NOIP普及组】奖学金 | OpenJudge NOI 1.10 04 | 洛谷 P1093 [NOIP2007 普及组] 奖学金
  2. php7.1 集成php fpm,LNMP建站教程(2):安装 PHP 7.1 与 PHP7.1-FPM以及与Nginx集成
  3. 编程修养 阅读笔记一
  4. 数分笔记整理22 - 数据处理项目 - 中国姓氏排行研究 房价影响因素挖掘
  5. CC1310F128RGZR 无线收发器 微控制器
  6. 第九届蓝桥杯,赛后感!!含泪写完。
  7. 解除网页无法选择文字_无法复制
  8. 创建反向词典,为你打开神经网络的大门
  9. 如何抠图图片?这个方法值得点赞收藏
  10. 什么是 5G CPE
  11. Docker学习(四):Dockerfile
  12. python获取当天日期
  13. 当逻辑表达式或者算法的计算过程冗长的时候该如何做的简单可读
  14. 计算机绪论知识点,第一章 绪论
  15. COI实验室技能:MATLAB控制PCO相机
  16. 记录一次拯救jenkins的历程
  17. git branch 删除
  18. [论文笔记] the book of why 0.引言
  19. 21款22款23款奔驰E300升级23P智能驾驶辅助系统全速自适应巡航
  20. 怎么让备忘录以及便签里的内容显示在手机桌面上

热门文章

  1. 编程世界经典秘籍:程序员的提问之道
  2. ftp端口映射问题(待解决)
  3. 年龄大了学计算机,年龄大了就“不值钱”的专业,30岁开始走下坡路,学生要慎重选择...
  4. 【电气安全】安科瑞电气火灾监控系统在江苏某大学中设计与应用
  5. kettle数据溢出了怎么办_kettle内存溢出
  6. 如何用javascript实现笛卡尔乘积?
  7. 【c语言】给出三角形的三边长,求三角形面积
  8. mysql通过TimeStampDiff求时间差
  9. 基于SSM驾校管理系统
  10. 笔记本电脑录屏快捷键是什么?这个方法需要牢记