用excel宏程序提取fbd期刊数据的简易编程
2015-03-26高绍强
■冯 民 高绍强
1)河北科技大学学报编辑部,河北石家庄市裕华东路70号 050018
2)河北科技大学信息科学与工程学院,河北石家庄市裕华东路70号 050018
近年来,我国科技期刊纷纷进行数字化转型,以期利用数字技术的传播优势扩大刊物的影响力,这其中涉及各种期刊数据的提取。人工提取数据劳动量大,耗费时间,且准确度不高,故势必被计算机提取所取代[1-2]。
针对方正fbd文件用excel宏程序提取数据的文章较少且论述较为简单。笔者用“excel”和“fbd”,或“excel”和“方正”作为关键词在中国知网只搜到2篇相近文献[3-4]。文献[3]使用 word宏制作目次文件,然后手工复制fbd文件到excel,并录制大量的宏进行数据的采集和处理,总体上不够简练;文献[4]通过VB提取方正排版文件的元数据,但所提方案较为复杂。
本文以能自动提取《河北科技大学学报》、《河北工业科技》(以下简称《学报》、《科技》)数据的宏程序编写为例,介绍用excel宏程序从fbd文件中提取数据的编程方法。《学报》、《科技》分别为单栏和双栏排版,doi位置不同,一些定位项目不同。本文可为多刊数据的提取提供参考。
1 程序设计思路
本文介绍的数据提取思路是:定位数据;采集数据;处理数据。编程思路是,由简到繁,由易到难。例如,开始编写程序时可只循环提取一项数据,同时对数据进行一定的“去杂”处理,数据的后处理与采集部分分开,一般是在循环提取结束后,这样针对不同的要求,可编写不同的后处理程序。用excel打开fbd后,所有内容都处于单元格内,且基本上是每段内容一个单元格,故对数据的处理就转换为对单元格的处理。
1.1 定位数据
定位数据用的是Ctrl Find宏语句(可由宏录制获得)。例如采集摘要时,定位语句如下:
对于多刊定位项目不同的情况,将“摘〓要”换成变量,如search_title,并在程序开始处用if语句进行选择设定(略)。
1.2 采集数据
提取单元格数据主要用到赋值语句mystr=ActiveCell.Value和循环语句do…loop while或for…next。循环语句是为了考虑数据可能存在于多个单元格的情况——此时需通过循环语句将单元格内容累加。以采集“摘要”为例,程序框图如图1所示。
图1 “摘要”采集程序框图
1.2 处理数据
所采集的数据有不少方正字符需要删除,也有如半字线、上下标等无法显示出来的方正符号,需要替换为正确的字符,还有将多作者、多单位分成每个作者及其对应的单位,等等。例如内容:
“[WT][ST]HT2SS JZ( HJ*2 无侧隙端面啮合蜗杆传动研究综述”,
其处理程序如下(为简便只给出“ ”部分的“去杂”程序,其他类同):
因各数据的处理具有许多共性部分,故可将这些共性部分的处理编写成一个或多个通用调用程序。本文中提到的revise_str()即是此种调用程序。
限于篇幅,如何定义变量以及其他编程技术未再进行详细介绍,读者可查阅相关参考书、网页示例或关注知名博客[5-7]。
2 编程实例
本文介绍的excel宏程序在运行时只需输入“刊物代号”、“年份”和“刊期”3个参数,随后程序自动完成剩余工作。按本文方法编写两个宏程序,分别针对勤云系统所需的excel目次文件及COAJ要求的数据文件(两个文件要求输出的数据格式不同),均能很好的实现和完成,且数据提取部分是通用的,只需修改后处理部分即可。本文介绍了几个主要流程程序的编写,并指出其他部分的编写与之相似。
2.1 将fbd文件打开为excel文件
程序运行时先将fbd文件打开为excel文件。为实现自动化,使用 InputBox语句,其使用示例如下:
Year=InputBox(Chr(13)&“请输入本期刊物的年份(默认为2014)”,“确定年份”,“2014”)
通过此语句可得到“年”变量。类似的,可得到刊物代号和期。获得年份和刊期的输入框如图2所示。
图2 利用InputBox输入年和期
如此,打开fbd为excel文件的程序语句如下:
其中file_name是通过合并上述输入框输入的刊物代号、年和期得到的,例如输入分别为“b”、“2014”、“6”,可得 file_name=Journal_code&Year&“0”&Issue=b201406.fbd。需要注意的是,在“d:\FBD\”目录下需存在以“b201406.fbd”命名的文件。
程序后面部分是将数据整体拷贝到宏程序所在excel的“abc”工作表。通常所有数据在第1列,但也有个别数据在第2列的情况。因此,需将第2列预处理,即判断第2列各单元格是否有数据,有则合并至同行第1列。语句如下:
2.2 解析“期刊参数”
利用定位语句定位“期刊基本参数”,然后可利用宏程序从中解析出期刊的基本数据。由于本文只用到论文篇数,故以解析论文篇数为例。
《学报》的“期刊基本参数”样例如下:
“[期刊基本参数]CN 13-1225/TS*1980*b*A4*100*zh*P* ¥20.00*1 000*15*2014-12”
定位后的具体处理语句如下:
通过上述提取和转换,程序自动获取本期所载的文章篇数“15”。
2.3 提取正文数据
通常,正文数据出现的顺序是固定的,故在编程时只需按顺序进行各数据的定位、提取。对于多刊数据位置不同的情况,则在相应位置编写的是加入判断后的提取语句。以《学报》、《科技》为例,按照其内容出现的先后顺序,可依次提取论文起止页码、doi(《学报》)、论文题目、中文作者名、中文单位、中文摘要、中文关键词、doi(《科技》)、英文题目、英文作者名、英文单位、英文摘要、英文关键词、参考文献。其中doi位置顺序不同,故在两个位置均有加入判断语句的doi提取程序,以根据刊物代号判定是否需要提取doi。其他诸如收稿日期、修回日期、作者简介、e-mail等数据信息,其位置固定在文章首页页脚。考虑到较长的中英文摘要可能出现在第2页,即这些数据与摘要的位置顺序并不固定,故必须采用新的循环,从第1行开始提取数据。
鉴于提取原理相似且篇幅所限,本文仅对论文起止页码、doi和参考文献的提取进行介绍。
2.3.1 论文起止页码的提取
“ HT5”H [STHZ]文章编号:1008-1542(2015)01-0001-08 JY,2”
提取论文起始页及论文篇幅的程序流程如下:
2.3.2 doi的提取
doi的提取较为简单,在相应位置顺序处使用判断语句。处理语句如下:
2.3.3 参考文献的提取
《学报》、《科技》的参考文献是以“参考文献/References:”开始的,故定位“参考文献/References:”。需全面考虑3种情况:1)参考文献没有转页;2)部分参考文献转页;3)全部参考文献转页。
提取程序框图见图3。需要注意的是,当前参考文献提取程序未考虑文末有补白的情况,补白尚需人工删除。
图3 提取参考文献的流程图
3 结语
详细介绍了用excel宏程序提取两个刊物fbd数据的编程思路和编程方法,运行时只需输入刊物代号、年和期即可。其编程难度不高,容易实现。经笔者1年多的使用,效果良好。
其缺点是只适合于定版后的fbd数据的提取,因为未定版fbd中定位所需的项目可能缺失、错误,这会导致定位的错乱乃至所提取数据错误。即便是定版后的数据,也可能存在错误,导致提取结果出错。故程序运行完毕后对数据检查是必不可少的步骤,相应地完善程序也是不可或缺的。好的一面是,可以将此程序当作定版文件的检验程序,以查验人工校对可能出现的失误。
参考文献
[1]程维红,任胜利,路文如,等.我国科技期刊由传统出版向数字出版转型的对策建议[J].中国科技期刊研究,2011,22(4):467-474.
[2]顾凯,邹栩.数字出版环境下科技期刊编辑职能、工作方式转变及自我调整策略[J].中国科技期刊研究,2012,23(3):499-501.
[3]黄鹂.Word/Excel辅助快速提取方正书版.fbd文件中文摘数据的方法研究[J].长江大学学报(自然科学版),2012,9(12):99-101.
[4]杨海亮,徐用吉.利用VB读取方正排版文件提取元数据[J].中国科技期刊研究,2015,26(6):612-617.
[5]刘铁英,张小白,叶慧玲.Word VBA及宏在科技期刊编辑中的应用[J].编辑学报,2007,19(1):47-48.
[6]百度文库.Excel_VBA_编程教程[EB/OL].[2011-04-21].http://wenku.baidu.com/view/5d4b2ae8e009581b6bd9eb0a.html.
[7]刘昌来,郑琰燚,王国栋,等.基于VBA的稿件采编系统中批量信息的修改[J].编辑学报,2014,26(1):66-68.