插件简介:
ExcelForEcms是一个专门为帝国cms系统开发的插件,用于Office Excel文档和ecms系统之间的数据导入、导出、批量修改。支持所有系统模型,不修改任何帝国系统文件,完全遵循帝国中设定的用户权限,多管理员权限配置;特别适合企业站的应用,数据维护人员无需是网站管理员,如大量产品参数的操作、账目内容的操作、批量附件上传等仅操作Excel文档即可;除系统提供的常用处理函数外用户还可以自定义函数对转换过程中的数据做任何处理;插件采用分组操作,理论上不限制数据量的大小。
EXCEL数据导入到帝国中:和通用的EXCEL导入Mysql不同的是您不需要考虑ecms系统Mysql数据库的系统字段及主副表等,插件无缝对接帝国系统,就像是用户一条一条录入的内容一样,没有任何区别,无需担心系统字段数据;可以使用系统提供的或自定义的函数对数据进行中间处理,正式导入前可以预览数据;具备增加信息权限时可以对同一系统模型的多个栏目一次性导入;支持本地附件及远程附件批量上传,支持设定附件地址前缀等
帝国数据导出到EXCEL文档中:选择您需要的数据字段进行导出,可以设定导出条件,按发布时期、按ID段、按发布者等,可以选择审核或未审核数据,未审核数据在EXCEL文档中以红色标记,可以使用系统提供的常用函数或自定义函数对数据做处理再保存到EXCEL文档中,比如时间戳的转换、去HTML代码等;具备栏目访问权限的前提下支持对同一系统模型的多个栏目一次性导出…
批量修改:可以将导出的数据进行编辑后再批量修改帝国系统中的数据,或者新建数据进行批量修改,和用户在帝国中点击信息的修改按钮修改数据完全一样,不同的是以EXCEL为准对数据进行了批量操作,过程中实时显示正在修改哪一条数据,非常直观,同样可以使用系统提供的或自定义的函数对中间数据进行处理,具备编辑权限的前提下可以一次性对同一系统模型的多个栏目数据进行修改…
插件的权限控制:超级管理员可以为后台其他管理员用户设定基于系统模型的插件使用权限,插件运行后再继承帝国系统中设定的用户权限,进行灵活多样的权限控制。
插件使用请查看以下具体教程
使用权:
本插件在本地机(localhost及127.0.0.1)可以无限制的永久免费使用,在服务器环境下可以全功能使用15天,如需继续使用您需要购买授权,作者花了很多时间及精力开发这个插件,插件的后续发展离不开大家的支持,罗辑思维的罗振宇在节目里面曾说过“如果你做了一款好的产品出来,你的很多买家希望你去死,他们明明知道企业没有利润会倒闭,但是在利润最薄的时候仍然会问能不能便宜一点,送一个最好了。。。。”。我想这样的买家应该是少数吧。如果您需要使用,暂时不能给予支持的话可以将数据库同步到本地机,操作完成后再导回服务器,作者完全开放本地机权限的目的也在于此,虽然多了些步骤但还是比一条条录入快的,如果是公司使用请购买授权吧,请支持ExcelForEcms的发展
关于购买:
请您在服务器试用没有问题后联系作者购买,试用中遇到的问题请加QQ群:203286137反馈咨询,软件属于不可收回商品,一旦成交不可退款,作者非公司恕不开具发票,购买后您可以加群得到售后服务。联系QQ:1零12五7肆684 交流QQ群:203286137
关于作者:
本插件由yunke开发,【云游天下,作客四方】,接受程序定制开发请联系QQ:1零12五7肆684
如果您有php程序开发方面的需求可以联系作者,作为自由职业者将根据当时的工作量决定是否达成合作
yunke 【云游天下,做客四方】于2013年10月31日
ExcelForEcms7.0_v1.0全功能版使用教程
ExcelForEcms作者yunke QQ:1零12五7肆684 交流群:203286137
插件安装使用需求:
1:php版本5.2及以上;php_zip、php_gd2、php_xml扩展必须被启用
2:session必须能正常使用,客户端cookie开启
3:“批量修改”浏览器端需开启js
安装步骤:
1:将ExcelForEcms文件夹复制到\e\extend\下
2:将ExcelForEcmsList.php放入e/data/html/list/
3:将ExcelForEcmsAddNews.php放入\e\admin 如果此后台地址被您更改,放入更改后的地址即可
4:进入帝国后台,修改需要操作的系统模型(系统/数据表与系统模型/管理数据表/管理系统模型/修改/信息列表名称),如下图,填入ExcelForEcmsList
4:安装完毕,此时进入帝国后台,任意打开该系统模型的一个栏目信息列表页可以看到导入Excel的按钮了,如需卸载,按此步骤返回即可,插件不修改任何系统文件
目录结构:
ExcelForEcms\ AppConfig.php 插件配置文件(插件入口),唯一需要改动的插件系统文件
ExcelForEcms\Classes 解析引擎PHPExcel类文件目录 PHPExcel版本:1.7.9更新于2013-06-02
ExcelForEcms\ Excelfile 用于存放Excel文件及其配置文件,初始时包含了实例数据
ExcelForEcms\ js 用于存放js文件
ExcelForEcms\ Template 模板目录,存放各模板文件
ExcelForEcms\ CheckExcel.php 导入数据前的预览检测程序
ExcelForEcms\DelExcel.php EXCEL文件删除执行程序
ExcelForEcms\ ExcelForEcms.php导入数据的主程序
ExcelForEcms\ ExcelForEcmsEdit.php批量修改数据调度程序
ExcelForEcms\ ExcelForEcms\ ExcelForEcmsEditEXE.php批量修改数据执行程序
ExcelForEcms\ ExcelForEcmsOut.php导出已审核数据主程序
ExcelForEcms\ ExcelForEcmsOutCheck.php导出未审核数据主程序
ExcelForEcms\FormatFun.php 插件提供的常用格式转换函数库,链接包含了用户自定义函数文件
ExcelForEcms\GlobalFunc.php 插件系统全局函数
ExcelForEcms\hinfofun.php 提取并修改自ECMS的信息添加/修改程序,
ExcelForEcms\UserFun.php 用户自定义函数文件
测试软件:
系统初始预带了测试数据,以便您测试和熟悉本插件,数据是以帝国带数据初始安装的新闻模型为对象的,安装完插件,修改新闻模型的信息列表名称为ExcelForEcmsList即可开始测试插件,点击相应按钮看一看效果吧,推荐您先进行此步骤,以便更好的理解下文描述内容。特别说明:测试数据示例在新装帝国程序带测试数据时可用以演示,以ID为1的管理员身份登录操作ID为1的模型(新闻系统模型),您可以测试、熟悉本插件
开始使用:
使用插件首先需要在ExcelForEcms\ Excelfile下建立配置文件(配置内容见下文),导入及批量修改操作需要在该目录下放入EXCEL文件,修改ExcelForEcms\ AppConfig.php文件,让系统指向您的配置文件,进入后台就可以进行相应操作了。
AppConfig.php配置如下:
示例:$ExcelFileConfig[1][1] = "Excelfile/yunke_config.php";
表示:$ExcelFileConfig[管理员用户ID][数据模型ID]=”配置文件地址”;
为该ID的管理员登陆帝国后台后有权在属于此数据模型ID的栏目上面使用本插件,按地址加载配置文件执行
$ExcelFile[2][4]表示为用户id为2的管理员在系统模型ID为4的栏目上面具备插件使用权限,具备ftp权限的超级管理员需要为其他管理员配置该选项,一般只有超级管理员才有FTP权限此处设置需要系统管理员事先设定好
$ShowExcelNum=10;//预览检测程序默认显示多少条Excel信息,推荐10条,太大反应比较慢,不可以为零;
1:EXCEL文档导入到ECMS中:
点击导入EXCEL,页面会进入增加信息提交页面,点击“开始导入EXCEL”后,表单内容提交到服务器,此时插件会从excel里面读取相应信息修改$_POST内容,然后再送入帝国自身的信息添加程序,循环此过程完成批量导入,这样就实现了和人工逐条添加一样的效果,这就是ExcelForEcms导入原理,对excel里面没有的内容使用提交的内容,由于EXCEL数据保存格式和帝国数据保存格式可能不一样,系统提供了常用的格式转换函数,并在正式导入前可以点击预览查看转换后的数据,可以准确查看数据是否符合要求,如下图所示:
导入检测程序运行界面如下:
导入数据的配置选项有7项,设置如下:
假设配置文件名为yunke_config.php,指定给id为1的管理员在id为1的系统模型上面使用则在AppConfig.php里面添加:$ExcelFileConfig[1][1] = "Excelfile/yunke_config.php";配置文件放入Excelfile/下,excel文件也放入这里。
$EFE_Workbook= "Excelfile/yunke.xls"; //文件路径及名字,尽管yunke.xls文件和配置文件在同级目录,但此处仍然加前缀Excelfile/,因为此路径是相对于执行程序而言,并非相对于配置文件
$EFE_Worksheet = "Sheet1"; //工作表名字
一个Excel文件可能会有很多个表单,请输入您要导入的表单名
$EFE_Field_Col:导入对应配置项,如下:
$EFE_Field_Col = array(
'title' => 'A',
'ftitle#1' => 'B',
'smalltext' => 'C#1',
'newstext' => 'D#kenger',
'newstime' => 'E#ExcelTimeToTime');
该配置项为一个PHP数组,键名为增加信息页面表单的元素name值(注:不一定是模型字段值),键值表示EXCEL文档中的列名,表示将该列数据对应到提交表单的该项,程序以此判断如何给$_POST元素赋值,建名加“#1”表示该项必填,如果excel中该列为空则记录错误,忽略此条继续导入下一条数据;键值加“#1”表示使用默认函数处理EXCEL中的数据后再导入到ECMS中,默认函数名为:“Excel文件名”+“_”+“大写列名”+“_”+“提交表单Name”。假设EXCEL文件名为yunke.xls如果是导入比如A列导入title项,则函数名为:yunke_A_title(),(如果表单Name含有[]则去掉[]),此时您需要自定义该名称的函数放入用户自定义函数文件UserFun.php中,您也可以直接使用键值加“#函数名”,表示使用该函数处理数据,该函数可以是帝国connect.php中的函数、php自身函数、插件提供的函数、自定义的函数。有些NAME值是一个数组,如name值为img[],键名则为“img[]”,如果同时又是必填项则键名为“img[]#1”,此时单元格需要用到分隔符分割多个值,见下文。
$EFE_GroupSize:
为了应对大数据的导入,系统采用分组导入,此处设置数据每组导入多少条数据,为避免服务器超时,可以设置小一些的值,比如10条,此最佳值和服务器性能及内存有关
$EFE_Address_Separate:
如果表单NAME值是一个数组,如name[],表示该项可能有多个值,常见的有附件、图集、投票等,此时EXCEL单元格中也可能有多个值,则每个值使用该处定义的分隔符进行分割,比如“####”等,需要注意的是此字符串不能和数据里可能出现的字符串相同,否则程序不能正确分隔值,该项一般在进行多图上传、设置投票时用到
$EFE_Address_Prefix:
有些数据可能具有相同的前缀值,比如上传图片时,一个图片地址为/d/file/photo/mingxing/yunketest/a.jpg,在图集上传时一个EXCEL单元格中有多个这样的值,这时看起来会非常乱,且在编辑数据时会很麻烦,使用此配置项可以解决该问题,将相同的前缀定义到这里,则在单元格里面只需要输入后半段的数据即可,如上面的地址在此配置为“/d/file/photo/mingxing/yunketest/”后,单元格里面只需要输入“a.jpg”即可(注意不要漏掉或多加“/”),程序在导入时会自动对数据加上前缀,但需要注意的是要使该项生效还需要在$EFE_Address_Prefix_Col配置项里指定该列启用前缀。一般在多图上传、远程附件时会用到该项配置地址的前缀。
$EFE_Address_Prefix_Col:
需要在数据前加$EFE_Address_Prefix前缀值的列,如$EFE_Address_Prefix_Col=array('B','C','D','E');表示BCDE的数据在导入时自动为数据加上设置的前缀值,不设置则不加前缀。
关于附件上传:
本插件说到的附件上传实际指的是将附件的地址正确提交到系统中,您还需要使用FTP工具将附件批量传送到相应位置,这样页面就可以通过EXCEL提交的附件地址访问到附件,变相实现了附件上传,该过程并不通过ECMS的附件管理相关程序,在附件管理里面查看不到上传的附件,从而实现了附件的任意位置存放,实现本地或远程附件批量传送,只需要在EXCEL文件里面正确反映该附件地址即可,这样做在大多数情况下是非常有用的,需要注意的是EXCEL地址列对应的表单元素type不能为file,当type=file时表示通过浏览器上传附件,以帝国默认测试数据“图片频道”为例,上传图片有源代码如下:
<input name=msmallpic[] type=text id='msmallpic1' size=28 ondblclick="SpOpenChFile(1,'msmallpic1');">
<br><input type=file name=msmallpfile[] size=15>
此处键名应该是msmallpic[],而不是msmallpfile[],通俗的讲就是需要您点选“选择文件”页面返回附件地址的那个表单输入项的NAME值。
关于导入需要注意的问题:
1:根据帝国CMS要求标题列任何时候都不能为空,否则标题列为空的EXCEL行不被导入并给出提示
2:Excel文件命令规则以字母开始且只含字母数字下划线,因为此涉及到格式转换函数的默认命令规则
4:任何情况下值为空则不进行格式转换,格式转换函数可以对原值进行任何处理,如翻译、替换等等
5:插件提供的时间格式转换函数有可能出现差一秒问题;由于EXCEL时间储存的是1900年1月1日以来的天数,当不足整数天时由于无穷小数问题导致差一秒
6:对于一个单元格中使用分隔符分割的多个值是连带分隔符整体作为一个字符串传送到格式转换函数中的,而不是分开或以数组传送,在处理函数中需要进行相应处理,
7:格式转换函数只接受一个参数,且返回和参数同样的数据类型
8:EXCEL文件导入前请将标题行删除,程序从第一行开始导入,而标题并不是真正的数据内容。
9:可以对同一系统模型下的多个栏目一次性批量导入,只需要在EXCEL文档中指定classid值即可。
10:导入每条数据前程序会调用帝国的验证程序验证是否有权操作,无权则停止运行。
11:EXCEL数据最好将公式等转换为具体的值,这样能加快导入速度。
12:非必填项对应的单元格如果为空值,会将$_POST中该项的值替换为空值
2:ECMS数据导出到EXCEL中:
点击导出EXCEL时,程序会依据配置从数据库中取出值保存到EXCEL对应的单元格中,导出的配置项可以和导入、批量修改的配置项放在一个配置文件中,导出有11项配置,如下:
$EFE_Out_Workbook= "Excelfile/yunkeout.xls";
导出的excel文件保存路径及名字,文件扩展名可以为xls(excel2003默认格式)或者xlsx(excel2007及以上版本默认格式),如果存在则进行追加数据,请注意是追加数据,不存在则自动建立
$EFE_Out_Worksheet= "EFE";
工作表名,如果存在则进行追加数据,请注意是追加数据,不存在则自动新建
$EFE_Out_GroupSize = 2;
分组导出的每组大小,防止服务器超时,根据服务器性能及内存来设置,性能越强值可以越大,推荐值为10
$EFE_Out_Column= array(34,35,36);
要导出的栏目ID,这些栏目必须属于同一个系统模型,且有权访问,导出按钮所在的栏目自动加入该配置,且需要模型相同
$EFE_Out_Check = 3;
1表示仅导出已审核的数据,2表示仅导出未审核数据,3表示全部导出
$EFE_Out_TimeStart = "";
导出条件:导出数据的发布起始时间,含该时间,不限请留空,格式2012-12-10 15:27:30
$EFE_Out_TimeEnd= "";
导出条件:导出数据的发布终止时间,含该时间,此值应大于等于$EFE_Out_TimeStart,不限请留空
$EFE_Out_IdStart= 0;
导出条件:导出数据的ID起始值,含该值,0为不限
$EFE_Out_IdEnd = 0;
导出条件:导出数据的ID终止值,含该值,此值应大于等于$EFE_Out_IdStart,0为不限
$EFE_Out_User= array();
导出条件:发布者会员名,仅导出这些会员发布的数据,如array("admin","Visitor")
$EFE_Out_Field_Col= array(
'id' => 'A',
'classid' => 'B',
'title' => 'C',
'befrom' => 'D',
'smalltext' => 'E',
'newstext#2' => 'F',
'newstime#TimestampToDate' => 'G');
该配置项为一个PHP数组,键名为数据库字段名(请注意不是提交表单NAME值,不只是后台查看模型字段中显示的字段名),键值为对应的EXCEL列名,键名包含了您能在phpMyAdmin中看到的所有主副表字段名,也就是说可以将系统字段导出,键名加“#1”表示字段值为UNIX时间戳时,此时必须在字段名后加#1,才能在EXCEL里面正确显示为日期时间,否则导出的为UNIX时间戳数字字符串(请注意这点和导入不同,导入#1表示调用默认函数处理数据);键名加“#2”表示带HTML标签的数据,此时程序将去掉HTML标签及HTML特殊字符后再保存到EXCEL中;键名加“#函数名”表示使用此函数处理值后再保存到EXCEL中,该函数可以是帝国connect.php中的函数、php自身函数、插件提供的函数、自定义的函数,用户自定义函数放在文件UserFun.php中,系统提供了最为常用的TimestampToDate函数将时间戳转化为2013-09-07 15:31:59格式(此函数在导出修改后再批量导入修改原数据时是很有用的)。如果找不到设置的函数将直接导出保存;如果什么也不加表示直接保存到EXCEL中
关于导出需要注意的问题:
1:键名加“#函数名”,是函数名,不带();
2:如果还需要将导出的数据修改后导回到ECMS中则导出时必须将classid及id导出,否则导出后的数据您将不知道属于哪个栏目
3:未审核数据保存在EXCEL中时A列背景标记为红色
4:数据处理函数只接受一个参数,且返回和参数同样的数据类型
5:导出到EXCEL中的数据默认是字符串格式
3:使用EXCEL批量修改ECMS中的数据:
批量修改ECMS中数据时,程序会先读取EXCEL中classid及id对应信息的值,通过该值调用帝国中的信息,此步骤相当于用户点击信息的“修改”按钮,信息调出后JS程序会自动将原值以表单方式提交给插件,插件再根据配置文件读取EXCEL文件修改相应的$_POST值,最后将修改好的数据送入帝国程序完成修改,此过程和用户手动修改完全一样,程序会按照excel的内容自动逐条修改完所有的信息。Excel文件可以是从ecms中导出的文件,或者是用户建立的,但里面均必须包含classid及id值。批量修改配置有7项,如下:
$EFE_Edit_Workbook = "Excelfile/yunkeout.xls";
用于修改ECMS信息数据的excel文件保存路径及名字,文件扩展名可以为xls(excel2003默认格式)或者xlsx(excel2007及以上版本默认格式)
$EFE_Edit_Worksheet = "EFE";
用于修改ECMS信息数据的excel文件工作表名字
$EFE_Edit_Field_Col= array(
'id' => 'A',
'classid' => 'B',
'title' => 'C',
'befrom' => 'D',
'smalltext' => 'E',
'newstext' => 'F',
'newstime' => 'G');
此配置项为php数组,键名为点击信息修改按钮后页面的提交表单的表单元素NAME值,键值为对应的EXCEL列名,该项配置和导入项的配置完全相同,请参看导入项$EFE_Field_Col的配置,但唯一不同的是批量修改数据必须提供id及classid,需要提供它们对应的列,且文档中有值;注意在$EFE_Edit_Field_Col配置中不要有多余的空格
$EFE_Edit_Address_Separate= "####";
代表的意义及配置和导入配置中的$EFE_ Address_Separate完全一样
$EFE_Edit_Address_Prefix= "";
代表的意义及配置和导入配置中的$EFE_Address_Prefix完全一样
$EFE_Edit_Address_Prefix_Col = array();
代表的意义及配置和导入配置中的$EFE_Address_Prefix_Col完全一样
$EFE_Edit_Wait_Time=0;
修改每条数据所间隔的时间,单位秒,0表示以能达到的最快速度修改;该项用于检查数据,批量修改过程中断的时候查看是哪一条数据出现问题,正常情况设置为0即可
关于批量修改需要注意的问题:
1:批量修改没有分组大小设置,由于过程特性原因,程序是逐条连续进行修改,相当于每组1条。
2:修改时客户端浏览器必须支持JS程序,否则用户可以在显示修改画面的时候点击提交按钮,以此人工代替JS功能
3:EXCEL文档中必须包含classid及id值,且有修改权限,无此值的行将自动跳过
4:批量修改和数据导入到ECMS中的原理几乎一样,可以将导入看成是批量修改的子集,因为批量修改多了一步调出带数据的修改页面,因此两者间很多配置项含义及配置一样。
5:批量修改可以对未审核数据进行操作,只需提供正确的classid及id值即可
插件提供的信息处理函数列表:
具体参看FormatFun.php文件内容,每个函数头均有详细说明
ExcelForEcms7.0_v1.0全功能版兼容问题解决方案
如果您的主机不支持PHPExcel,您又无法更改配置,请按下列步骤可以解决兼容问题:
1:在本机安装服务器环境,推荐使用phpStudy集成环境(经测试此工具搭建的默认环境支持ExcelForEcms,其他工具未测试,可以自行测试)
2:将服务器端程序文件全部下载到本地环境,包括数据库配置文件
3:配置hosts文件,让您的域名在本机指向本地服务器,配置本地服务器环境,让域名指向帝国目录
4:完成!这样就在本机建立了一个和服务器一样的网站,使用了同一个数据库,在本地操作即可,完成后到服务器端刷新文件
以下以phpStudy为列讲解过程:
1:安装phpStudy,它包含了Apache+PHP+MySQL+phpMyAdmin+Zend Loader,一次性安装,无须配置即可使用
2:建立目录,为这个目录配置域名:
打开phpStudy的站点域名配置,输入如下:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "C:/e7"
ServerName www.e7.com
ServerAlias e7.com
</VirtualHost>
这里在C盘建立了一个e7文件夹,并配置域名为www.e7.com 它就是你网站的根目录了
3:将您网站的程序等文件都下载到本地的C:/e7
4:修改HOST文件,在phpStudy里面有“打开HOSTS”菜单,添加127.0.0.1 www.e7.com
5:完成,这样你访问www.e7.com就访问到你C:/e7下的网站了,开始使用ExcelForEcms吧
注意:这里的www.e7.com应该改为您网站的域名,当你输入您的域名时访问的是你本机的环境,如果要访问真正的服务器在HOSTS里取消配置即可,访问本机再添加配置,这样就解决了兼容问题了
本问讲的是XP环境下,其他环境相应处理即可,都会的吧
ExcelForEcms作者yunke QQ:1零12五7肆684 交流群:203286137
ExcelForEcms7.0_v1.0全功能版下载地址:http://bbs.phome.net/showthread-31-305661-0.html
或到群共享里面下载