# 用excel表格做差异分析

=AVERAGE(D2:L2)    ##求NASH组的平均表达量

=AVERAGE(M2:S2)    ###求normal的平均表达量

=T2-U2             ##计算得到logFOLDchange值

=AVERAGE(D2:S2)    ###得到所有样本的平均表达量

=T.TEST(D2:L2,M2:T2,2,3)  ###用T检验得到两个组的表达量的差异显著程度。

15

# perl操作excel表格

perl这个语言已经过时很久了，所以它的模块支持性能不是很好，暂时我只看到了对excel2003格式的表格的读取写入操作。

[perl]

#!/usr/bin/perl -w
# For each tab (worksheet) in a file (workbook),
# spit out columns separated by ",",
# and rows separated by c/r.

use strict;
use utf8;
use Encode::Locale qw(\$ENCODING_LOCALE_FS);
use Encode;

my \$filename ="test.xls";#输入需要解析的excel文件名，必须是03版本的
my \$e = new Spreadsheet::ParseExcel; #新建一个excel表格操作器
my \$eBook = \$e->Parse(\$filename);    #用表格操作器来解析我们的文件
my \$sheets = \$eBook->{SheetCount};   #得到该文件中sheet总数
my (\$eSheet, \$sheetName);

foreach my \$sheet (0 .. \$sheets - 1) {
\$eSheet = \$eBook->{Worksheet}[\$sheet];
\$sheetName = \$eSheet->{Name};
my \$f1 = encode(locale_fs => \$sheetName); #每次操作中文我都很纠结，还得各种转码
open FH_out ,">\$f1.csv" or die "error open ";
next unless (exists (\$eSheet->{MaxRow}) and (exists (\$eSheet->{MaxCol})));
foreach my \$row (\$eSheet->{MinRow} .. \$eSheet->{MaxRow}) {
foreach my \$column (\$eSheet->{MinCol} .. \$eSheet->{MaxCol}) {
if (defined \$eSheet->{Cells}[\$row][\$column])
{
print FH_out \$eSheet->{Cells}[\$row][\$column]->Value . ",";
} else {
print FH_out ",";
}
}
print FH_out "\n";
}
close FH_out;

}
exit;

[/perl]