使用 Apache 的 POI 包设置 excel 列宽

字数120 大约花费0分钟

可以使用 setColumnWidth 方法设置 excel 列的宽度。例如:

1
sheet.setColumnWidth(i, width);

需要注意语句的顺序, 有时候在创建相应的行和列之前使用该语句,没有效果。所以,可以把上面的语句放在代码的最后。

谈谈 IT 的文章均为原创或翻译(翻译会注明外文来源),转载请以链接形式标明本文地址: http://tantanit.com/shi-yong-apache-de-poi-bao-she-zhi-excel-lie-kuan/

谈谈IT

欢迎关注官方微信公众号获取最新原创文章

使用 java 根据 url 下载并重命名文件

字数412 大约花费2分钟

根据 url 下载并重命名文件,包含以下操作:

告诉浏览器新的文件名称

使用 response.setHeader 方法,设置 filename,为了使中文文件名称不乱码,需要加 UTF-8 编码,代码如下:

1
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");

设置 contentType

首先,通过 FilenameUtils.getExtension 获取文件后缀,再根据文件后缀设置 contentType,代码中例子为下载 xls 或 xlsx 类型的文件:

如何将 select 控件设置为只读

字数330 大约花费1分钟

select 控件是否有 readonly 属性

select 控件自身没有 readonly 属性,只有 disable 属性。

能否使用 disable 属性设置 select 控件为只读

select 设置为 disable 属性后,确实不可改,起到只读的作用,但设置为 disable 后,name 属性也失效了,传递到后台时,对应的属性值变为 null 了。
有一种解决办法是在提交到后台之前将 disable 属性去掉,但在页面上不应过多依赖 js 处理数据,因为如果出错了,会影响到数据安全。建议的解决办法是将 select 设置为 disable 属性后,在后面增加一个 hidden 类型的 input 控件,name 和值都与 select 相同。
github 上有一个 readonly 插件 完成了上述动作,该插件支持 select 和 input 控件,在项目中引入 readonly.js 文件后,可以直接使用。

1
2
3
4
<select id="testSelectReadOnly" >
<option value="1">1</option>
<option value="2">2</option>
</select>

使用 MySQL 函数计算一段时间内的有效时长

字数970 大约花费5分钟

有时候需要计算两个时间点之间的有效时间的长度,比如某天上午几点到某天下午几点之间,上班时间的长度,可以使用下面的函数进行计算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
CREATE FUNCTION `get_eff_time_length`(datetime_start datetime,datetime_end datetime,eff_time_start TIME,eff_time_end TIME) RETURNS int(11)
BEGIN
DECLARE dayCount INTEGER;
DECLARE effMiddleSeconds INTEGER;
DECLARE effSecondsFirst INTEGER;
DECLARE effSecondsLast INTEGER;
DECLARE time_start TIME;
DECLARE time_end TIME;
DECLARE result INTEGER;
SET dayCount = DATEDIFF(datetime_end,datetime_start);
SET time_start=TIME(datetime_start);
SET time_end=TIME(datetime_end);
IF dayCount=0
THEN
IF eff_time_start>time_start
THEN
SET time_start=eff_time_start;
END IF;
IF eff_time_end<time_end
THEN
SET time_end=eff_time_end;
END IF;
IF time_end< time_start
THEN
SET result=0;
ELSE
SET result=TIME_TO_SEC(SUBTIME(time_end,time_start));
END IF;
ELSE
SET effMiddleSeconds=(dayCount-1)*TIME_TO_SEC(TIMEDIFF(eff_time_end,eff_time_start));
IF time_start>eff_time_end THEN
SET effSecondsFirst=0;
ELSE
IF eff_time_start>time_start
THEN
SET time_start=eff_time_start;
END IF;
SET effSecondsFirst=TIME_TO_SEC(SUBTIME(eff_time_end,time_start));
END IF;

IF time_end<eff_time_start THEN
SET effSecondsLast=0;
ELSE
IF eff_time_end<time_end
THEN
SET time_end=eff_time_end;
END IF;
SET effSecondsLast=TIME_TO_SEC(SUBTIME(time_end,eff_time_start));
END IF;
SET result=effSecondsFirst+effMiddleSeconds+effSecondsLast;
END IF;

RETURN result;
END

下面的测试用例计算一段时间内,在 9 点到 21 点之间的有效时长(取个对称的时间,方便测试。已经工作了的程序员留个言,看看有没有人经常加班到 21 点),单位为秒。测试用例没有覆盖所有情况,有兴趣的同学帮忙补一补。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- 同一天,两段时间相交,11.5 小时,41400 秒 
SELECT get_eff_time_length(STR_TO_DATE('2015-12-21,09:30:00','%Y-%m-%d,%H:%i:%s')
,STR_TO_DATE('2015-12-21,21:30:30','%Y-%m-%d,%H:%i:%s')
, TIME(STR_TO_DATE('09:00:00','%H:%i:%s'))
, TIME(STR_TO_DATE('21:00:00','%H:%i:%s'))
)

-- 同一天,两段时间不相交,0 秒
SELECT get_eff_time_length(STR_TO_DATE('2015-12-21,08:30:00','%Y-%m-%d,%H:%i:%s')
,STR_TO_DATE('2015-12-21,09:00:00','%Y-%m-%d,%H:%i:%s')
, TIME(STR_TO_DATE('09:00:00','%H:%i:%s'))
, TIME(STR_TO_DATE('21:00:00','%H:%i:%s'))
)

-- 同一天,两段时间不相交,0 秒
SELECT get_eff_time_length(STR_TO_DATE('2015-12-21,21:30:00','%Y-%m-%d,%H:%i:%s')
,STR_TO_DATE('2015-12-21,22:00:00','%Y-%m-%d,%H:%i:%s')
, TIME(STR_TO_DATE('09:00:00','%H:%i:%s'))
, TIME(STR_TO_DATE('21:00:00','%H:%i:%s'))
)

-- 跨天,都不在有效时间,0 秒
SELECT get_eff_time_length(STR_TO_DATE('2015-12-21,21:30:00','%Y-%m-%d,%H:%i:%s')
,STR_TO_DATE('2015-12-22,8:30:00','%Y-%m-%d,%H:%i:%s')
, TIME(STR_TO_DATE('09:00:00','%H:%i:%s'))
, TIME(STR_TO_DATE('21:00:00','%H:%i:%s'))
)

-- 跨天,第一天包含全部有效时间,第二天不在有效时间,12 小时,43200 秒
SELECT get_eff_time_length(STR_TO_DATE('2015-12-21,8:30:00','%Y-%m-%d,%H:%i:%s')
,STR_TO_DATE('2015-12-22,8:45:00','%Y-%m-%d,%H:%i:%s')
, TIME(STR_TO_DATE('09:00:00','%H:%i:%s'))
, TIME(STR_TO_DATE('21:00:00','%H:%i:%s'))
)

-- 跨天,第二天包含全部有效时间,第一天不在有效时间,12 小时,43200 秒
SELECT get_eff_time_length(STR_TO_DATE('2015-12-21,22:00:00','%Y-%m-%d,%H:%i:%s')
,STR_TO_DATE('2015-12-22,21:30:00','%Y-%m-%d,%H:%i:%s')
, TIME(STR_TO_DATE('09:00:00','%H:%i:%s'))
, TIME(STR_TO_DATE('21:00:00','%H:%i:%s'))
)

-- 跨天,两天都有部分在有效时间,1.5 小时,5400 秒
SELECT get_eff_time_length(STR_TO_DATE('2015-12-21,20:00:00','%Y-%m-%d,%H:%i:%s')
,STR_TO_DATE('2015-12-22,9:30:00','%Y-%m-%d,%H:%i:%s')
, TIME(STR_TO_DATE('09:00:00','%H:%i:%s'))
, TIME(STR_TO_DATE('21:00:00','%H:%i:%s'))
)

-- 跨两天,第一天和第三天都有部分在有效时间,13.5 小时,48600 秒
SELECT get_eff_time_length(STR_TO_DATE('2015-12-21,20:00:00','%Y-%m-%d,%H:%i:%s')
,STR_TO_DATE('2015-12-23,9:30:00','%Y-%m-%d,%H:%i:%s')
, TIME(STR_TO_DATE('09:00:00','%H:%i:%s'))
, TIME(STR_TO_DATE('21:00:00','%H:%i:%s'))
)

谈谈 IT 的文章均为原创或翻译(翻译会注明外文来源),转载请以链接形式标明本文地址: http://tantanit.com/shi-yong-mysql-han-shu-ji-suan-yi-duan-shi-jian-nei-de-you-xiao-shi-chang/

谈谈IT

欢迎关注官方微信公众号获取最新原创文章

Eclipse 报 PermGen space 内存不足的解决办法

字数116 大约花费0分钟

Eclipse 报 PermGen space 的解决办法

使用 Eclipse 开发 Java Web 应用时,经常会发现内存不足,报出内存溢出。此时,按照上图步骤编辑相应 jre 属性,并填写以下参数,并确保保存成功即可。

-Xms640m -Xmx640m -XX:PermSize=256m -XX:MaxPermSize=512m

谈谈 IT 的文章均为原创或翻译(翻译会注明外文来源),转载请以链接形式标明本文地址: http://tantanit.com/eclipse-bao-permgen-space-nei-cun-bu-zu-de-jie-jue-ban-fa/

谈谈IT

欢迎关注官方微信公众号获取最新原创文章

Javascript 中!!(两个感叹号,双感叹号) 的作用

字数884 大约花费4分钟

Javascript 中!!(两个感叹号,双感叹号)的含义

使用 javascript 时,有时会在变量前面加上两个感叹号,这样做表示什么含义呢?Javascript 中,! 表示运算符“非”,如果变量不是布尔类型,会将变量自动转化为布尔类型,再取非,那么 用两个!! 就可以将变量转化为对应布尔值

Javascript 中哪些情况下!! 值为真?

Javascript 中哪些情况下!! 值为真?当变量转化为布尔值 true 时为真咯!

Javascript 中各种类型如何转换为布尔值?

我们至少可以想到 undifined 和 null 一定是转化为 false 的,数字 0 也一定是 false,那么,空字符串,空数组,空对象呢?别急,下面的实验会有清晰的答案。

首先,定义三个转化布尔值的函数,我们后面会看到这三个函数是等价的, 并且同时输出三个函数的转化结果

WordPress 后台只有菜单,没有内容的解决办法

字数268 大约花费1分钟

有时候在 WordPress 系统迁移后,或者在动了 apache 或 php 后,发现后台 菜单都在 ,但是点击时,右侧窗体却不加载,内容为空白。而 插件菜单都可以点击并且正常。惨状就像下面这张图这样:

wordpress 后台不加载

或许,你还能发现以下的报错信息:

Fatal error: Access to undeclared static property: WP_Screen::$this
in blog/wp-admin/includes/screen.php on line 706

而你很真的真的很确定自己没有动过 WordPress 的任何配置啊!这时要怎样修复呢?别当心,stackoverflow 上有人遇到 同样的问题。只要找到以下文件

中国电信发送 QQ 垃圾消息

字数216 大约花费1分钟

chinatelecom-spam

2014 年 1 月 18 日 11 点 23 分,也就是刚才,收到一个名为“中国电信”的用户发送的一条 QQ 消息,内容是促销热门手机。第一反应是有人假冒中国电信发送 QQ 垃圾消息。事实是 …

促销链接地址,居然是 189.cn 的,whois 信息显示这个网址确实属于中国电信,被雷到了。

2014 年 IT 行业展望

字数409 大约花费1分钟

2014

2014 如约而至,今年有许多值得期待的发展。

可穿戴设备

谷歌的 Google Glass 如果投入量产的话,会对人们的生活习惯造成很大冲击。而诸如苹果的智能手表也能带来很多方便。

智能手机操作系统

HTML5 概述

字数949 大约花费4分钟

什么是 HTML5

HTML5 就是第五代 HTML,这种命名就像 WEB2.0,CSS3,移动 4G 网络, 标榜着新一代的、更酷更先进的标准。

为什么要制定 HTML5 标准?

根据 W3C 文档维基百科,HTML 创建于 1990 年,7 年后,HTML4 成为标准,沿用至今。在此期间,制定了 XHTML1 标准(定义了 HTML4 的序列化),DOM LEVEL 2 HTML(为 HTML 和 XHTML 制定了 JavaScript 标准)。现在业界在混用 HTML4,XHTML1 以及 DOM LEVEL 2 HTML,各浏览器支持的特性也不同,而且许多网页还存在语法错误。HTML5 将会成为同时支持 HTML 和 XHTML 语法的标记语言。它规范和改进现有标签,鼓励交互性,并且为复杂的 web 应用引入新的标记语言和 API。它被设计成支持性能较低的智能手机和平板,因而是跨平台移动应用的候选标准。

HTML5 的发展历程

2004 年,WHATWG(Web Hypertext Application Technology Working Group) 开始制定新标准,而 W3C(World Wide Web Consortium)此时将精力放在制定 XHTML 2.0 上,到了 2009 年,W3C 宣布停止更新 XHTML2.0 标准,转而和 WHATWG 携手制定 HTML5 标准。

2004 年,由 Mozilla Foundation 和 Opera Software 提交意见书,并交由 WHATWG 制定 HTML5 标准。