昨天一位朋友找到我,说他手上有几千个word表格需要转换到一个excel文件里,他在网上也没有找到满足需求的软件,于是让我帮忙用程序实现。

需求

需求如下图所示:每个文档文档中有一个或多个格式固定的表格,需要把每一个word表格转换为excel文件里的一行。

from:

to:

寻找解决方案

我首先想到的是用PHP读取word文档,处理之后转成excel。

转成excel比较简单,使用PHP系统函数fputcsv就可以搞定,现在需要做的是读取到word文档里的内容。

紧接着我便去网上查找,看有没有PHP的扩展能够读取word文档。

在Github搜索到一个叫做 PHPWord 的扩展,不过遗憾的是,这个扩展只能往word文档里写入内容,并不能读取。

我又想,能不能把word转成其他格式再读取。

于是我将word文档的后缀改成了txt,打开文件后内容如下图。

密密麻麻的一大堆,反正我是没能从中找到什么规律,于是放弃了这种方法。

接着我在word的另存为功能中,发现可以另存为其他格式。

于是选择保存为htm文件,随后在浏览器中打开转换好的文件,发现表格转换成了html中的table表格,非常标准。

这样我只需要遍历读取htm文件,获取其中的内容,再进行相应处理便能得到最终数据。

进行处理

准备

首先我在网上下载了软件,将word文档批量转换为htm文件,并放在同一目录下

读取文件内容

我们事先将所有转换好的文件放在了同一目录下,所以只需要遍历该目录,并使用file_get_contents()函数就能获取到每个文件的内容。

提取有用内容

查看htm源代码能发现,每个word表格转换后变成了一个html表格,只需要先取到

标签里的内容,然后再按行分割,按列分割,便能得到我们想要的数据了。

附上简略代码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

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71function ()

{

//写入文档头部

$fileName = './data.csv';

file_put_contents($fileName,'');

$handle = fopen($fileName, 'w');

fwrite($handle, chr(0xEF).chr(0xBB).chr(0xBF)); // 写入BOM头,防止乱码

$titleArr = ['A' => '样品类型', 'B' => '图幅编号'];//次数省略

fputcsv($handle, $titleArr);

return $handle;

}

//读取文件夹下的所有文件

function scanFile($path)

{

$result = [];

$files = scandir($path);

foreach ($files as $file) {

if ($file != '.' && $file != '..') {

$result[] = basename($file);

}

}

return $result;

}

//提取表格内容

function getContents()

{

$filesArr = scanFile('./');

$handle = writeExcelHeader();

foreach ($filesName as $k => $v){

//读取文件内容

$text = file_get_contents($path . $v);

//转换编码

$text = iconv("gb2312", "utf-8//IGNORE",$text);

//去除html标签多余属性

$text = preg_replace("/]*>/","",$text);

//提取表格内容

preg_match_all("/

/is",$text,$matches);

//处理表格内容

foreach ($matches[1] as $match){

html2excel($match, $handle);

}

}

//处理表格内容

function convert($content)

{

$res = [];

//按行拆分

$trArr = explode('

', $content);

foreach ($trArr as $k => $tr){

//去除多余标签

$tr = str_replace('

','', $tr);

//按列拆分

$tdArr = explode('

', $tr);

foreach ($tdArr as $kk => $td){

//去除多余标签

$td = str_replace('

','', $td);

//去除html标签 得到内容

$text = strip_tags($td);

$res[] = $text;

}

}

fputcsv($handel, $res);

}

getContents();

最后

使用到的一些函数:iconv() 编码转换

preg_replace() 使用正则替换文本

preg_match_all() 使用正则获取内容

strip_tags() 去除文本中的html标签

str_replace() 文本替换

fputcsv() 将制定内容写入csv文件

php word excel表格数据库,记一次使用PHP将word转为excel的经历相关推荐

  1. ExcelPatternTool: Excel表格-数据库互导工具

    ExcelPatternTool Excel表格-数据库互导工具 介绍: 指定Pattern文件-一个规则描述的json文档,基于此规则实现Excel表格与数据库之间的导入导出,校验等功能. 特点: ...

  2. matlab导入数据作图,如何将excel表格中大量数据导入matlab中并作图:excel表格数据制图软件...

    是否有能替代Excel作图表的软件? 我认为数据观你可以试试,因为它提供多种可视化图表,涵盖所有excel提供的图形,您可以进行任何个性化设置. 将excel数据制作成漂亮图表的软件?做图表用什么软件 ...

  3. php中怎么连接数据库中的表,php 连接 excel表格数据库数据-php中如何将execl的数据导入到数据库中...

    php中如何将execl的数据导入到数据库中 php导出大量数据的Excel: PHP从数据库分多次读取100万行记录,和分多次将100万行写入文本文件都没问题 Excel可以支持100万行记录,Ex ...

  4. php 链接excel表格数据,php 怎么把数据导出到excel表格?php 连接 excel表格数据库数据...

    php 怎么把数据导出到excel表格 php 把数据导出到excel表多种方法如使用 phpExcel 等,以下代码是直接通 header 生成 excel 文件的代码示例: header(&quo ...

  5. oracle中的表怎样保存,怎样保存excel 表格数据库中-如何将excel表格更新oracle数据库中数据...

    如何将excel表格更新oracle数据库中数据 这里以SQL SERVE2008为例.SQLSERVER2008有一个"数据导入导出功能",当然我们也可以打开数据库之后,在数据库 ...

  6. php excel导入数据库显示乱码,php修改excel表格数据库数据格式-使用phpexcel导入excel表格数据到MYSQL,乱码怎么解决...

    PHP 用PHPExcel往数据库导入大量数据 估计0是null,所以不显示了,可以换个思路,让他显示为字符串 $number = 0; echo ''.$number 原生PHP代码实现excel导 ...

  7. excel表格数据库表字段带下划线转驼峰

    数据库表字段(小写字母带下划线)转驼峰字段,excel表格,可使用公式: LEFT(A2,1)&MID(SUBSTITUTE(PROPER(A2),"_","&q ...

  8. word列表数据计算机,怎么把树状图的数据填成excel表格-谁会计算机啊,怎么把word里的表格数据转换成簇状......

    excel中生成后的数据透视表如何把树形结构每层的空... 打开Word文档窗口,切换到"插入"功能区.在"插图"分组中单击"图表"按钮. ...

  9. excel html 查询,html 连接 excel表格数据库数据-利用EXCEL表格为数据库制作查询网页...

    请教如何将HTML中有链接的数据提取到EXCEL表格里? 将网页中的数据拷贝到excel表格中,默认是全部选中的,您只要单击鼠标右键选择删除超链接即可(此操作在excel2010上测试通过) 请问EX ...

最新文章

  1. RabbitMQ消息队列-Centos7下安装RabbitMQ3.6.1
  2. 精算模型10 非参数模型0 精算数据、非参数建模的思路概述
  3. 中国金融数字科创大赛丨神策数据客户——深圳农商银行、昆山农商银行斩获「双奖」
  4. notion函数_Notion使用指南 | Database篇
  5. CentOS7 源码编译安装MySQL8.0.15 shell脚本
  6. 第十一届蓝桥杯省赛C++组试题 第6题
  7. 关于LabVIEW视觉ROI的读取与存储
  8. NET中class与struct的区别简析
  9. python3下的IE自动化模块PAMIE
  10. SQL server数据缓存依赖
  11. 【渝粤教育】国家开放大学2018年春季 0603-22T建筑工程管理与实务 参考试题
  12. 计算机网络基础 — Bypass 网卡
  13. 【python】nonebot--QQ接口库
  14. php 检测硬盘,php测试硬盘读写速度脚本
  15. Flink1.13.0 + Hudi 0.11.1 + Hive2.1.1 + presto0.273.3 + yanagishima 18.0
  16. 【czy系列赛】czy的后宫6 bzoj1044 [HAOI2008]木棍分割
  17. 义隆单片机学习笔记之(二) 指令系统
  18. Python实现--使用微信定时每天和女友发送定制消息(附代码教程)
  19. 微博数据爬虫——获取特定ID的热门转发用户列表(五)
  20. Python网络爬虫实战(四)模拟登录

热门文章

  1. 中金电信 文思海辉 pactera email 邮箱设置
  2. 订阅者java_发布者订阅者模式之JAVA实现
  3. 一个轻巧高效的多线程c++stream风格异步日志(一)
  4. git 如何提交丰富的emoji表情
  5. ps厚涂颜色过渡混合画笔工具插件
  6. 【FLACC】A Greedy Agglomerative Framework for Clustered Federated Learning
  7. 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
  8. 什么是cmd?能做啥?告诉你...
  9. SpringBoot是什么,可以做什么?
  10. ESP8266连接腾讯云物联网平台