转自:http://hi.baidu.com/yanweinet/blog/item/71a872d743d487d8a044dfe9.html
本程序要求用于转换的txt文本内数据用"|"线分隔,当然也可以根据自己的需要来修改,用"|"主要是因为很多时候提取的数据是用unload语句从数据库中提取的。
这里要说明的是,单靠shell程序是不可能按照excel的真正的文件格式来写的,但是用这个程序转换的文本是能直接用windows下的excel程序打开的。估计已能基本满足一般的要求了。
原理:将“|”分隔的数据最终换成以“ ”(tab制表符)分隔,文件名后缀改为.xls即可用windows下excel程序打开了。在这个程序里还解决了两个问题,第一个就是以"0" 开头的数字转换以后用excel打开后"0"会被自动删掉,再一个就是如果数字超过11位的长度则打开以后数据会自动用科学记数法表示。解决的办法就是在 这类数据前加" ' "(单引号),因为excel程序中如果在数字前加" ' "(单引号)则表示以文体格式存储数据。后来我测试的结果是打开的时候仍然能够看见在程序中添加的" ' "(单引号),在excel单元格双击这些数据后才会变为文本格式," ' "(单引号)消失。在我现在的应用中这也没什么大碍,因为这些数据本来就是文本样式的,不用参与做计算等,比如超过11位的一般就是身份证,以0开头的数 据则一般是状态标识。这样做以后我就可以拿这个程序来做批量转换,总比手工一个一个去用excel转换要轻松的多。
shell实现txt转换excel源程序如下:
本程序要求用于转换的txt文本内数据用"|"线分隔,当然也可以根据自己的需要来修改,用"|"主要是因为很多时候提取的数据是用unload语句从数据库中提取的。
这里要说明的是,单靠shell程序是不可能按照excel的真正的文件格式来写的,但是用这个程序转换的文本是能直接用windows下的excel程序打开的。估计已能基本满足一般的要求了。
原理:将“|”分隔的数据最终换成以“ ”(tab制表符)分隔,文件名后缀改为.xls即可用windows下excel程序打开了。在这个程序里还解决了两个问题,第一个就是以"0" 开头的数字转换以后用excel打开后"0"会被自动删掉,再一个就是如果数字超过11位的长度则打开以后数据会自动用科学记数法表示。解决的办法就是在 这类数据前加" ' "(单引号),因为excel程序中如果在数字前加" ' "(单引号)则表示以文体格式存储数据。后来我测试的结果是打开的时候仍然能够看见在程序中添加的" ' "(单引号),在excel单元格双击这些数据后才会变为文本格式," ' "(单引号)消失。在我现在的应用中这也没什么大碍,因为这些数据本来就是文本样式的,不用参与做计算等,比如超过11位的一般就是身份证,以0开头的数 据则一般是状态标识。这样做以后我就可以拿这个程序来做批量转换,总比手工一个一个去用excel转换要轻松的多。
shell实现txt转换excel源程序如下:
#!/bin/sh #帮助 #处理单个文件的转换 #帮助 txtfile="$1" #txt文件 if [ $# -eq 2 ];then #最终保存的EXCEL文件的文件名 #补齐行首和行尾的"|" if [ $? -eq 0 ];then #非批量处理的参数情况 if [ -d "$TXTfileDIR" ];then if [ $# -eq 3 ];then #批量处理,TXTfileDIR可以是存放要文件的一目录,也可以是类似"*.txt"等 dealone $txt $XLSfileDIR exit 0 |