最近接触一些需要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. 【转】并查集&MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...

  2. [错误]试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

    错误原因: dll文件是在64位机下编译的,而服务器是32位机,所以无法调用 或者dll文件是在64位开发环境下下编译的,而现在的调用程序是的32位,所以无法调用 注意项目属性:

  3. [Unity3D+算法]一小时做个2048

    原地址:http://blog.csdn.net/dingxiaowei2013/article/details/36462749 048是继FlappyBird之后另一个比较热的轻量级的手游,简单易 ...

  4. PHP 打印函数之 print print_r

    print 说明 int print ( string $arg ) 输出 arg print 实际上不是一个函数(它是一个语言结构),因此你可以不必使用圆括号来括起它的参数列表 参数 arg:输入数 ...

  5. 为什么android的R类要定义成16进制

    联想到c语言中的宏定义:我想是一个原因 如: #define SDL_INIT_TIMER 0x00000001 #define SDL_INIT_AUDIO 0x00000010 #define S ...

  6. IT 基础设施

    http://www.cnblogs.com/wintersun/p/4355267.html

  7. SDUT2087离散事件模拟-银行管理

    呃,这个题,我只想仰天长啸:无语死我了,还动用了繁和帅锅给我改,妹的,做题一定要仔细仔细再仔细啊,这种小错误都犯真是该打. 题目描述 现在银行已经很普遍,每个人总会去银行办理业务,一个好的银行是要考虑 ...

  8. 【转载】SSH框架总结(将网上朋友写的给整合了下)

    一.Struts 在没有学习SSH框架前,我们一般采用Jsp+javabean+servlet开发,这里就是MVC架构.而Struts其实就是替代了Servlet,我们知道Servlet在一般的开发中 ...

  9. TDD 用语

    OOP  封装  继承  多态 SOLID  SRP 单一职责  Single Responsibility Principle  OCP 开放封闭  Open/Close Principle  LS ...

  10. 解决在windows的eclipse上面运行WordCount程序出现的一系列问题详解

    一.简介 要在Windows下的 Eclipse上调试Hadoop2代码,所以我们在windows下的Eclipse配置hadoop-eclipse-plugin- 2.6.0.jar插件,并在运行H ...