php打开EXCEL过慢,PHPExcel API

再续前文,因为考虑如何在 Python 里面读写 Excel,后来研究来研究去,接口根本就不好用,因此干脆用 php 做一个 http 的 api,自己写脚本,于是便有了这个项目:

这里面有一个难点在于用 python 去模拟发送一个 multipart/form-data 的表单,经过这个实践,也对 http 的请求响应结构有了更深的了解了。

关于如何使用 python3 发送 multipart/form-data 请求,当时参考的这个最大帮助。

另外中间遇到了一些编码上面的问题,后面再慢慢做归纳。

下面简单把自己写的文档记录一下:

phpexcel-api

一个 php 处理 excel 的 http api,供其他程序语言调用。

基本架构:

通过 HTTP 提交一个 Post请求,然后返回一个下载 Excel 的响应。

可以通过一个如下的表单来模拟这个请求:

请求方式是 multipart/form-data,同时提交表单数据以及附件。

因此,请求头应当符合如下格式,这一点请自行参见 multipart/form-data 请求的实现方法:

[Request Headers]

Content-Type: Content-Type:multipart/form-data; boundary=BOUNDER_STRING

因此,POST 的请求体里面包括两个主要的部分:

$_FILE[‘template’]: 用于作为模板的 excel 文件,然后通过。(缺省为空 xls 文件)

$_POST[‘data’]: 用于传递填充模板的“脚本”,具体语法后面会进行叙述。

另外,配置参数通过 $_POST[‘config’] 提供 json 的配置字典,用于覆盖 config 的默认值。

具体配置参数后面会提到。

请求发出之后,本接口会打开模板 xls 文件,然后顺着脚本内容填充数据,最后返回一个响应下载 xls。

具体的响应头形如:

[Response Headers]

Content-Disposition: attachment; filename="excel.xls"

Content-Type: application/vnd.ms-excel

注意两点:

如果上传的模板文件是 xlsx 的 2007 格式,响应回来的格式会是 xlsx,否则为 xls;

返回的文件名是配置的文件名,缺省为模板的文件名,如模板缺省,则为 excel.xls。

填充脚本

本 api 的运作步骤如下:

打开一个模板文件,转到第一个 WorkSheet;

根据配置项row_delimeter分割脚本行,每行一个脚本命令;

根据配置项col_delimeter分割每个脚本命令,得到命令参数 args;

执行命令,args 第一个参数为命令名称,后面的是命令参数;

脚本命令

选择 WorkSheet SELECT_WORKSHEET [OK]

index: 选择 worksheet 的序号(从 0 开始)

例如下面的例子会当前活动的 worksheet 选择为第二个(下标为 1)

SELECT_WORKSHEET|1

填充单元格 FILL [OK]

cell: 单元格位置,例如 A1

content: 填充到该单元格的内容

下面的例子会将今天天气很好,我们去割草。这句话填充到 A1 单元格中:

FILL|A1|今天天气很好,我们去割草

填充单元格(根据坐标) FILL2 [OK]

col: 列坐标,从 0 起算

row: 行坐标,从 1 起算

content: 填充到该单元格的内容

例如,3-4 坐标对应的是 D4 单元格,下面例子将$5.25填写进 D4 单元格中:

FILL2|3|4|$5.25

合并单元格 MERGE [未实现]

begin: 选取区域的开始单元格

end: 选取区域的结束单元格

例如,下面的例子会将 A1-D3 这 12 个单元格合并:

MERGE|A1|D3

调整区域样式 STYLE [未实现]

begin: 选取区域的开始单元格

end: 选取区域的结束单元格

style: 加粗 BOLD / 斜体 ITALIC / 下划线 UNDERLINE,如果是取消对应的样式,在前面加~符号

例如,下面的例子会将 A2 单元格加粗显示:

STYLE|A2|A2|BOLD

下面的例子取消 A1-F100 范围内所有的加粗效果:

STYLE|A1|F100|~BOLD

调整字号 FONT_SIZE [未实现]

begin: 选取区域的开始单元格

end: 选取区域的结束单元格

size: 字号,用数字表示

例如下面的例子会将 A1 单元格字号调成 16

FONT_SIZE|A1|A1|16

调整单元格是否自动换行 WRAP_TEXT [未生效]

begin: 选取区域的开始单元格

end: 选取区域的结束单元格

wrap: 0 不换行,1 换行

例如下面的例子会将 A1 单元格设置成自动换行

FILL|A1|this cell\nhas multline values

WRAP_TEXT|A1|A1|1

设置单元格超链接 SET_URL [OK]

cell: 单元格位置,例如 A1

url: 设置单元格链接到的 url

例如下面的例子会给 A1 单元格添加到百度的链接

SET_URL|A1|http://www.baidu.com/

【转载请附】愿以此功德,回向 >&gt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值