发布网友
共5个回答
热心网友
常用的用php读取excel的方法有以下三种,各自有各自的优缺点。个人推荐用第三种方法,因为它可以跨平台使用。
1.
以.csv格式读取
将.xls转换成.csv的文本格式,然后再用php分析这个文件,和php分析文本没有什么区别。
优点:跨平台,效率比较高、可以读写。
缺点:只能直接使用.csv的文件,如果经常接受.xls二进制文件的话需要手工转换,不能自动化。一个文件只有一个sheet。
php有自带的分析.csv函数:fgetcsv
array
fgetcsv
(
int
$handle
[,
int
$length
[,
string
$delimiter
[,
string
$enclosure]]]
)
handle
一个由
fopen()、popen()
或
fsockopen()
产生的有效文件指针。
length
(可选)必须大于
cvs
文件内最长的一行。在
php
5
中该参数是可选的。如果忽略(在
php
5.0.4
以后的版本中设为
0)该参数的话,那么长度就没有*,不过可能会影响执行效率。
delimiter
(可选)设置字段分界符(只允许一个字符),默认值为逗号。
enclosure
(可选)设置字段环绕符(只允许一个字符),默认值为双引号。该参数是在
php
4.3.0
中添加的。
和
fgets()
类似,只除了
fgetcsv()
解析读入的行并找出
csv
格式的字段然后返回一个包含这些字段的数组。
fgetcsv()
出错时返回
false,包括碰到文件结束时。
注意:
csv
文件中的空行将被返回为一个包含有单个
null
字段的数组,不会被当成错误。
当然也可以自己手动分析字符串。
还可以利用fputcsv函数将行格式化为
csv
并写入文件指针。
2.
odbc链接数据源
优点:支持多种格式,cvs,
xls等。支持读写,使用标准sql语言,和sqlserver、mysql数据库几乎完全一样。
缺点:值支持windows服务器
3.
php自定义类
优点:跨平台。某些类支持写操作。支持.xls二进制文件
常用的类有phpexcelreader、phpexcel。其中后者支持读写,但是需要php5.2以上版本。
phpexcelreader是专门用来读取文件的。返回一个数组,包含表格的所有内容。
该
class
使用的方法可以参考网站下载回来的压缩档中的
example.php。
不过我下载回来的
(版本
2009-03-30),有两点要注意:
reader.php
中的下面这行要修改
将
require_once
‘spreadsheet/excel/reader/oleread.php’;
改为
require_once
‘oleread.inc’;
example.php
中
修改
$data->setoutputencoding(’cp1251′);
为
$data->setoutputencoding(’cp936′);
example2.php
中
修改
nl2br(htmlentities($data->sheets[$sheet]['cells'][$row][$col]));
为
$table_output[$sheet]
.=
nl2br(htmlspecialchars($data->sheets[$sheet]['cells'][$row][$col]));
不然中文会有问题。
繁体的话可以修改为cp950、日文是cp932,具体可参考codepage说明。
修改
$data->read(’jxlrwtest.xls’)
为自己的
excel
文件名,zip
档中附的
jxlrwtest.xls
应该是坏了。
热心网友
可以将上下班时间固定在某几个单元格,比如C1为上班时间8:30
=if(a1>c1,"迟到","")
其实从考勤机去的数据,可以做一个更完善的出勤考核表,甚至直接和工资表一体化处理追问老师指点的明示,感激不尽啊,但是我想读好几个中文词语,比如8:30之前显示正常,9:30之后显示旷工,这个怎么叠加啊?我试了几个不行。
另外请老师您明示怎么和工资表一体化处理?我QQ343855507 邮箱343855507@qq.com
追答给你做一个样板
标准时间:8:0011:3013:0017:0018:3021:30
旷工9:0010:3014:0016:0019:3020:30
姓名上午下午晚上考勤
上班下班上班下班上班下班上午下午晚上
张三7:5510:5513:0017:2018:0021:20早退早退
李四8:0011:0014:0016:5018:2019:50早退迟到旷工
王五8:0512:0513:1015:5517:5020:00迟到迟到旷工
赵六9:0011:3014:2017:1019:5020:55迟到旷工旷工
陈七9:2011:4012:5018:0018:4021:00旷工迟到
热心网友
如果出勤时间是A列,在B列
=IF(A1<=0.35417,"正常上班","迟到")
热心网友
假设实到时间在A列,考勤结果显示在B列
B2=IF(A2>TIME(8,30,),"迟到",""),向下填充
热心网友
有没有试过调用系统时间,或者只在这个时间段里考勤什么的