最近接触一些需要csv,txt,excel文件之间的转换,根据一些网上搜索加上自己的改动,实现自己想要的结果为主要目的,代码的出处已经找不到了,还请见谅,以下主要是针对csv&excel 和txt&excel写的perl脚本。
主要用到的模块是:
 

Text::CSV
Spreadsheet::WriteExcel

Spreadsheet::ParseExcel

Spreadsheet::ParseExcel::FmtUnicode

Unicode::Map

可以支持中文,具体也没有要仔细说明的,直接看代码熟悉以上的模块吧!

txt&execl之间的转换:
 

execl2txt:

#!/usr/bin/perl 
#===============================================================================
#
# FILE: excel2txt.pl
#
# USAGE: ./excel2txt.pl excel_filename txt_filename 
#
# DESCRIPTION: Convert a Excel document to a text file
#
#===============================================================================

use strict;
use warnings;

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;

unless($ARGV[0] && $ARGV[1])
{
        die "Please enter the filename of Excel document.
Usage : excel2txt.pl [Excel filename] [Text filename]
For example : excel2txt.pl input.xls output.txt";
}

# Chinese support

my $code = "CP936"; 
my $oFmtJ = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => $code);

my $oExcel = new Spreadsheet::ParseExcel;
my $doc = $oExcel->Parse($ARGV[0],$oFmtJ) or die "File open error:$!\n";
my $outfile = $ARGV[1];

my $worksheet = $doc->{Worksheet}[0];
my $text;

# Get the excel data

for(my $row_num = $worksheet->{MinRow};$row_num <= $worksheet->{MaxRow};$row_num++)
{
        for(my $col_num = $worksheet->{MinCol};$col_num <= $worksheet->{MaxCol};$col_num++)
        {
                $text .= $worksheet->{Cells}[$row_num][$col_num]?$worksheet->{Cells}[$row_num][$col_num]->Value:"";

if($col_num != $worksheet->{MaxCol})
                {
                        $text .= "\t"; # print tab

}
                else
                {
                        $text .= "\r\n"; # print <CR>

}
        }
}

# Write to file

open FH,">$outfile";
print FH $text;
close FH;
print "done!\n";

 

txt2excel:
#!/usr/bin/perl 
#===============================================================================
#
# FILE: txt2excel.pl
#
# USAGE: ./txt2excel.pl [txt filename] [excel filename] 
#
# DESCRIPTION: Convert text file to excel
#===============================================================================

use strict;
use warnings;

use Unicode::Map;
use Spreadsheet::WriteExcel;

unless($ARGV[0] && $ARGV[1])
{
        die " USAGE: ./txt2excel.pl [txt filename] [excel filename] \n ";
}

my $filename = $ARGV[1];
my $tmp_filename = $ARGV[0];

my $workbook = Spreadsheet::WriteExcel->new($filename);
my $worksheet = $workbook->add_worksheet();

# Chinese support

my $Map = new Unicode::Map("GB2312");

# Convert word to unicode

sub w2u
{
        my $word = shift;
        return $Map->to_unicode($word);
}

my $row = 0;
my $col = 0;

open FH,$tmp_filename or die"file open error.\n";
while(<FH>)
{
        chomp;
        $col = 0;
        s/\s+//g;
        my @array = split(";",$_);
        foreach my $value (@array)
        {
                $worksheet->write_unicode($row,$col,w2u($value));
                $col++;
        }
        $row++;
}
close FH;
print "done!";

接下来看看csv&excel之间的转换:
 

#!/usr/bin/perl -W
#
# File: excel2csv.pl
# License: GPL-2

use strict;
use warnings;

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;

my $local_enc = "CP936";

unless($ARGV[0] && $ARGV[1])
{
        die "Please enter the filename of Excel document.
Usage : excel2csv.pl [Excel filename] [Csv filename]
For example : excel2csv.pl input.xls output.csv\n";
}

my $oFmtJ = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => $local_enc);
my $excel = Spreadsheet::ParseExcel->new();
my $book = $excel->Parse($ARGV[0], $oFmtJ);

my $last_sheet = $book->{SheetCount} - 1;

my $filename = $ARGV[1];
open my $fh, ">", $filename
          or die "Can open $filename to write: $!\n";
for my $worksheet ( @{ $book->{Worksheet} }[ 0 .. $last_sheet ] ) {

next
         if not defined $worksheet->{MaxRow}
         or not defined $worksheet->{MaxCol};

my @row = $worksheet->{MinRow} .. $worksheet->{MaxRow};
     my @col = $worksheet->{MinCol} .. $worksheet->{MaxCol};

for my $row ( @{ $worksheet->{Cells} }[ @row ] ) {
         my @cellvalue = map {
            $_ = $_->Value() if ref $_;
            $_ = '' if not defined $_;
            $_;
         } @$row[ @col ];
         print $fh join(";", @cellvalue), "\n";

}
}
close $fh;

csv2excel用到的比较少,也就粗略了
 

#!/usr/bin/perl -w

use strict;
use Text::CSV;
use Spreadsheet::WriteExcel;

die("Usage: $0 [input filename(s)]\n") if (scalar @ARGV == 0);

my $xl = Spreadsheet::WriteExcel->new('output.xls');

foreach my $filename (@ARGV) {
    my $csv = Text::CSV->new;

my $wsname = $filename;
    $wsname =~ s/.csv//g;
    $wsname =~ s/-/ /g;
    my $ws = $xl->add_worksheet($wsname);

my $row = 1;
    open FH, $filename; while (<FH>) {
        $csv->parse($_);
        my @fields = $csv->fields;
        $ws->write("A$row", \@fields);
        $row++;
    }; close FH;
}

主要是做为备份,以免忘记丢失。

csv,txt,excel文件之间的转换,perl脚本的更多相关文章

  1. R—读取数据(导入csv,txt,excel文件)

    导入CSV.TXT文件 read.table函数:read.table函数以数据框的格式读入数据,所以适合读取混合模式的数据,但是要求每列的数据数据类型相同. read.table读取数据非常方便,通 ...

  2. 【Python】通过python代码实现demo_test环境的登录,通过csv/txt/excel文件批量添加课程并开启课程操作--(刚开始 项目 页面 模块 元素这种鸟 被称作pageobject 等这些搞完 然后把你的定位器、数据 和脚本在分离 就是传说中那个叫数据驱动 的鸟)

    一.1.通过csv文件批量导入数据 1 from selenium import webdriver from time import ctime,sleep import csv #循环读取每一行每 ...

  3. python读取与写入csv,txt格式文件

    python读取与写入csv,txt格式文件 在数据分析中经常需要从csv格式的文件中存取数据以及将数据写书到csv文件中.将csv文件中的数据直接读取为dict类型和DataFrame是非常方便也很 ...

  4. C# 读取CSV和EXCEL文件示例

    我们习惯了直接连到数据库上面读取数据表的数据内容: 如果有一天我们需要读取CSV,EXCEL文件的内容的时候,可不可以也像读数据表的方式一样呢?当然可以,使用OleDB ADO.NET是很简单的事情 ...

  5. Visual Studio各版本工程文件之间的转换 [转载]

    原网址:http://www.cnblogs.com/jmliao/p/5594179.html Visual Studio各版本工程文件之间的转换   由于VS版本比较多,低版本无法直接打开高版本的 ...

  6. R|批量循环处理同一格式文件-csv,txt,excel

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/8IfMrSr9xc8_1Y2_9Ne6hg 在一个文件夹下有很多字段一致,格式统一的数据文件(csv,txt ...

  7. Pandas系列-读取csv/txt/excel/mysql数据

    本代码演示: pandas读取纯文本文件 读取csv文件 读取txt文件 pandas读取xlsx格式excel文件 pandas读取mysql数据表 import pandas as pd 1.读取 ...

  8. python操作csv和excel文件

    1.操作csv文件 1).读取文件 import csv f=open("test.csv",'r') t_text=csv.reader(f) for t,i in t_text ...

  9. C#导出数据到CSV和EXCEL文件时数字文本被转义的解决方法

    今天写C#导出datagrid数据到csv格式文件的时候,发现不管怎么尝试,凡是单元格里面全是数字的单元格,在用Excel打开的时候,都被自动转义成数据格式.数据查看极其不方便.最后google了一下 ...

随机推荐

  1. javascript基础之客户端事件驱动

    我们知道,面向对象发展起来后,“一夜之间”,几乎所有的语言都能基于对象了,JavaScript也是基于对象的语言.用户在浏览器上的行为称作“事件”,之后引发的一系列动作,比如弹窗啦,改变浏览器大小啦, ...

  2. 开源 P2P 直播 视频会议

    转自:http://blog.csdn.net/pkueecser/article/details/8223074 一个P2P点播直播开源项目:P2PCenter(我转过来的时候发现已经都打不开了.. ...

  3. 用MSBuild和Jenkins搭建持续集成环境 - 转

    http://www.infoq.com/cn/articles/MSBuild-1 http://www.infoq.com/cn/articles/MSBuild-2 MSBuild是在.NET ...

  4. 基于AgileEAS.NET企业应用开发平台的分布式解决方案

    开篇 分布式应用 AgileEAS.NET基于Microsoft .Net构件技术而构建,Microsoft .Net最吸引人的莫过于分布式应用技术,基已经提供了XML WebService. .Ne ...

  5. 【BZOJ】【2844】albus就是要第一个出场

    高斯消元解XOR方程组 srO  ZYF  Orz 膜拜ZYF…… http://www.cnblogs.com/zyfzyf/p/4232100.html /******************** ...

  6. PE文件结构详解(一)基本概念

    PE(Portable Execute) 文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等,事实上,一个文件是否是PE文件与其扩展名无关,PE文件可以是任 何扩展名.那 ...

  7. Application.persistentDataPath 的一个小坑

    打包之前在Android的Player Setting里面选择WriteAccess (写入访问) Internal Only:表示Application.persistentDataPath的路径是 ...

  8. netbean使用技巧

    1.让代码智能提示 有些情况下Ctrl+Space这个键被一些输入法占了,我们需要修改一下点击 工具->常规->快捷键映射->找到显示代码完成弹出式菜单->编辑为你喜欢的键就好 ...

  9. 数据库批量插入数据的shell脚本

    测试用,先来一个简单的,这个是国产神通数据库的,用isql命令: !/bin/bash == "-h" ] then echo "USAGE: $0 table_name ...

  10. Ubuntu 12.04下虚拟磁带库mhvtl的安装和使用

      项目需要连接一下昆腾虚拟磁带库DXI 6701 ,这玩意太贵,不好得到,先弄个虚拟软件测试了, 网上了一下,有这个软件: mhvtl   主页: https://sites.google.com/ ...