最近接触一些需要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. JqueryMoblie 之 loading

    显示“正在加载........”等字样,并且带有加载图片的显示. //显示加载器function showLoader() { $.mobile.loading('show', { text: '正在 ...

  2. description 数组的中文打印

    打印一个对象:NSLog(@"%@", stu); 默认情况下打印的时对象的名字和内存地址:这时需要重写description方法 // 重写description方法 - (NS ...

  3. 保持程序在后台长时间运行-b

    iOS为了让设备尽量省电,减少不必要的开销,保持系统流畅,因而对后台机制采用墓碑式的“假后台”.除了系统官方极少数程序可以真后台,一般开发者开发出来的应用程序后台受到以下限制:1.用户按Home之后, ...

  4. iOS10 配置须知-b

    在iOS10中,如果你的App想要访问用户的相机.相册.麦克风.通讯录等等权限,都需要进行相关的配置,不然会直接crash.需要在info.plist中添加App需要的一些设备权限. NSBlueto ...

  5. android开发设置dialog的高宽

    这里设置为跟屏幕一样的宽度,:看代码 dlg.show(); WindowManager.LayoutParams params = dlg.getWindow().getAttributes(); ...

  6. SQL Server表分区【转】

    转自:http://www.cnblogs.com/knowledgesea/p/3696912.html SQL Server表分区   什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在 ...

  7. EXT4.2--Ext Designer 使用

    前言: “画EXT”是一个美好的想法,如果有一款可视化工具能够只需进行拖拽而设计EXT,生成代码--那真是一件美丽的事.然而现实是,即使是为Eclipse装上EXT插件,用上idea,手写代码的提示也 ...

  8. crud springmvc

    实体类:Student.java package demo.entity; public class Student { private int id; private String name; pr ...

  9. Mongo常用操作

    设置登陆验证 进入Mongo添加用户    db.addUser('root','123456') 编辑Mongo配置文件  vi /etc/mongod.conf   找到#auth = true ...

  10. Candy

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...