Chinaunix

标题: Shell中能把数据写入xls对应单元格吗? [打印本页]

作者: Herowinter    时间: 2014-03-05 10:13
标题: Shell中能把数据写入xls对应单元格吗?
有一个文本文件是这样的
A1        B1        C1
A2        B2        C2
A2        B3        C3
还有一个空的my.xls文件,
我想把A1写到xls的单元格A1,A2写到单元格A2...
可以办到吗?还是要通过csv来中转?求大概代码,
多谢,否则我要手动操作好几千行。
作者: huang6894    时间: 2014-03-05 10:21
回复 1# Herowinter


    不能。。。
   两个方法:
   1、直接生成xls后缀,tab键分隔,win下可以用excel直接打开
   2、使用perl等其它程序可以直接把文本转成excel
作者: 关阴月飞    时间: 2014-03-05 10:21
回复 1# Herowinter


    shell不能直接操作excel文件, 需要用文件中转, 先保存为文本再导进excel吧
作者: jackhuntcn    时间: 2014-03-05 10:23
回复 1# Herowinter


    可以考虑下python的xlrd。https://pypi.python.org/pypi/xlrd
作者: q1208c    时间: 2014-03-05 10:39
存在 csv 就可以了. excel 可以直接打开的.
作者: HH106    时间: 2014-03-05 10:45
  1. #!/usr/bin/env python
  2. import xlwt
  3. wbk = xlwt.Workbook()
  4. sheet = wbk.add_sheet('test')
  5. row = 0
  6. f = open('txt','r')
  7. for line in f:
  8.     L = line.split()
  9.     sheet.write(row,0,L[0])
  10.     sheet.write(row,1,L[1])
  11.     sheet.write(row,2,L[2])
  12.     row += 1
  13. wbk.save('my.xls')
复制代码

作者: Herowinter    时间: 2014-03-05 10:52
@huang6894@关阴月飞@jackhuntcn@q1208c@HH106
多谢了,因为那个文本文件是我自己awk生成的,
我可以让输出规范一点,保存为csv。
然后导入excel,进行少量的编辑后另存为xls,目前
我打算这么做的,试了下一个小例子好像可以。
另外,多谢楼上的python脚本,非常感谢,原来
python处理这个非常方便。
作者: huang6894    时间: 2014-03-05 10:55
回复 6# HH106


    有个问题,如果遇到多行多列以及中文。。怎么破?
作者: huang6894    时间: 2014-03-05 10:56
本帖最后由 huang6894 于 2014-03-05 11:12 编辑

回复 7# Herowinter

try~
  1. => cat txt2xls.pl
  2. #!/usr/bin/perl -w
  3.   use Encode(qw(decode));
  4.   use strict;
  5.   use Spreadsheet::WriteExcel;
  6.   my $file=$ARGV[0];
  7.   my $out=$ARGV[1];
  8.     open (TXT,"$file") or die "$file: $!";
  9.     my $workbook  = Spreadsheet::WriteExcel->new("$out");
  10.     my $worksheet = $workbook->add_worksheet();
  11.     my $row = 0;
  12.     while (<TXT>) {
  13.     chomp;
  14.     # Split on tab
  15.     my @Fld = split('\t', $_);
  16.     my $col = 0;
  17.     foreach my $token (@Fld) {
  18.     $worksheet->write_string($row, $col, decode('gb2312',$token));
  19.     $col++;                         }
  20.     $row++;
  21.     }
复制代码

作者: Herowinter    时间: 2014-03-05 11:01
回复 9# huang6894
多谢,对于我来说,我处理的文本不会出现中文字符,
另外,因为文本文件是我自己处理得到的,我在awk
程序输出前把记录中的‘\n’替换成空格了,然后得到一个
很长的字符串,导入后我手动调整一下排版就可以了。


   
作者: HH106    时间: 2014-03-05 11:03
回复 8# huang6894

1 中文的话,加上 coding:utf-8
2 多行多列不是很明白你的意思,我上面是列写死了的,改改判断下读取的分割列数,应该可以解决。
   
作者: huang6894    时间: 2014-03-05 11:04
回复 11# HH106


    嘻嘻,谢谢,学习了
作者: sohusina    时间: 2014-03-05 13:43
还一种办法,把数据先存到mysql之类的数据库里,再导出为excel。
作者: Herowinter    时间: 2014-03-05 14:24
回复 13# sohusina
多谢提供另外一种思路。

   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2