Tag: perl

Perl从xls读取插入到mysql

我是相当新的Perl,我正在写一个Perl脚本从xls读取数据,并将结果插入MySQL DB,但我有问题…这是我的代码: #!/usr/local/bin/perl use strict; use warnings; use diagnostics; use Spreadsheet::ParseExcel; use DBI; use Data::Dumper qw(Dumper); my $parser = Spreadsheet::ParseExcel->new(); my $workbook = $parser->parse('test.xls'); my $dbh = DBI->connect("dbi:mysql:parser", "root", "123qwe", { RaiseError => 1}) or die $DBI::errstr; my $query = 'INSERT INTO parser (Name,Country) VALUES (?,?)'; my $sth = $dbh->prepare($query) or die "Prepare failed: " […]

如何使用Excel :: Writer :: XLSX打印到下一个垂直空单元格

我正在使用模块Excel::Writer::XLSX 。 我的程序将打开这样的Excel文件 ABC 1 xx 2 xx 3 xx 4 5 而在上面的例子中,我想打印到A4,A5等 这可能吗? 目前我正在使用 $worksheet->write( "a$num", "$key" ); $num++; 但是这总是从一个特定的点开始。

无法访问Perl循环中的哈希查找表

我正在写一个比较两个Excel文件的数据的Perl脚本。 我目前正在采取一个Excel文件的两列,并存储在一个哈希。 我使用的数据是电子邮件地址,这个值只是Excel表格中的另一个值(不重要)。 我只是试图将所有的电子邮件存储为散列键,以便我可以遍历另一个('删除')excel文件,并查看电子邮件是否存在于原始成员表中。 我的意图是这样的: 1)创build哈希和查找数组: my %members_list; foreach my $row (2..$MembersLastRow){ $members_list{lc($Members->Cells($row,1)->{'Value'})} = lc($Members->Cells($row,2)->{'Value'}); } my @removals_list; foreach my $row (2..$RemovalsLastRow) { push(@removals_list, lc($Removals->Cells($row,1)->{'Value'})); } 2)遍历查找数组并检查哈希中是否存在: foreach my $key (sort @removals_list) { print $key; if($members_list{$key}){ print " – MATCH!"; } print "\n"; } 问题是,当我尝试运行这个,从来没有任何匹配。 删除列表中的所有元素都应该存储在members_list哈希中。 我已经尝试打印$ members_list {$ key}到屏幕上,然后出现“未初始化的使用”等等等等等等。 这几天我一直在为此奋斗,任何帮助都不胜感激。 这是我使用的代码的整个页面! use strict; use […]

Excel :: Writer :: XLSX ::图表 – add_series():名称属性的问题

当我使用一个公式来公布它的名字时(第一个系列: Max. ),但是当我直接写这个名字的时候,我得到了默认的名字(第二个系列: Column B而不是Min. )。 为什么第二种方法在这里不起作用? 在Excel :: Writer :: XLSX :: Chart中#CHART_METHODS是一个直接传递name属性的例子。 我正在用LibreOffice打开文件。 #!/usr/local/bin/perl use warnings; use 5.014; use Excel::Writer::XLSX; my $workbook = Excel::Writer::XLSX->new( 'spreadsheet.xlsx' ) or die $!; my $worksheet = $workbook->add_worksheet( 'One' ); my $ref = [ [ 'Max.', 'Min.' ], [ 7, 5 ], [ 11, 5 ], [ 9, […]

保存SQLite查询结果在Excel中与Perl

我有以下perl代码来执行sqlite查询并将结果保存在文本文件中。 但是我想将结果保存在Excel表格中。 有什么办法可以做到吗? #!/usr/local/bin/perl -w use strict; use DBI; my $dbfile = 'C:\usage.db3'; # your database file my $dbh = DBI->connect( # connect to your database, create if needed "dbi:SQLite:dbname=$dbfile", # DSN: dbi, driver, database file "", # no user "", # no password { RaiseError => 1 }, # complain if something goes wrong […]

Spreadsheet :: WriteExcel write_formula错误

我正在尝试使用WriteExcel编写一个公式 =SUMIF(J3:J54;"=xxx";H3:H54) 但是这个代码: $sheet->write_formula($row+1, 0, "=SUMIF(J" . ($row-($row-3)) . ":J" . ($row-2) . ";\"=xxx\";H" . ($row-($row-3)) . ":H" . ($row-2) . ")"); 以。。结束 未知的定义名称SUMIF在test.pl第196行的公式中 但是当我打印出这个公式(使用print)时,我得到了和想要的完全一样的string(在$ row上的计算是好的) 我很确定这个代码应该工作

如何使用msoPattern常量将图案应用于使用Perl Win32 :: OLE的Excel图表中的一系列图案

我正在使用Win32 :: OLE Perl模块来更改图表中特定数据点的模式。 我可以这样做: $chart->SeriesCollection(2)->Points(5)->{Interior}->{Pattern} = xlPatternUp; 例如。 要清楚这与预期完全一样。 然而,xlPattern *常量只允许Excel识别模式的一个子集。 看来整套模式是在msoPattern *常量中指定的(至less是我想要使用的那个)。 我试图以相同的方式使用msoPattern *常量之一: $chart->SeriesCollection(2)->Points(5)->{Interior}->{Pattern} = msoPatternWideUpwardDiagonal; 但是这没有效果。 数据点将以“固定”(默认)模式呈现。 我已经确认我正确导入了常量,例如: use Win32::OLE::Const 'Microsoft Office 12.0 Object Library'; 我怎样才能使用msoPattern *常量来改变模式?

Excel :: Writer :: XLSX set_optimization()只写入数字数据

我正在使用Excel :: Writer :: XLSX perl模块导出到Excel。 除了大量出口需要很长时间以外,它工作得很好。 但是,当我添加$ workbook-> set_optimization(); 我只在我的.xlsx文件中获取数字数据。 我已经尝试使用$ worksheet-> write()和$ worksheet-> write_string(),但是当我使用$ workbook-> set_optimization()时,任何具有string而不是数字的字段将被省略。 如果我使用较旧的Spreadsheet :: WriteExcel模块,它工作得很好,但导出的文件大小要大得多,24MB与7MB 以下是创build标题行的代码: # Create a new workbook my $workbook = Excel::Writer::XLSX->new($file_path); $workbook->set_optimization(); my $worksheet = $workbook->add_worksheet(); # insert the header row my $header_cnt = 0; foreach my $header_cell (@header_values){#loop through each header column and add […]

Excel :: Writer :: XLSX页面视图和分页符(Perl)

我search了API,Google,StackOverflow等,试图find以下问题的答案,但到目前为止,我的追求令人失望。 有人能帮我吗? 1)我试图使用set_page_view()选项来默认工作表到“分页预览”。 不幸的是,CPAN页面并没有给我这个函数的有效参数。 我试图使用set_page_view('Page Break Preview'),但是这给了我“页面布局”视图。 2)在我的脚本中,我引用了set_h_pagebreaks()和set_v_pagebreaks来dynamic放置页面中断,因为我写的Excel表单。 这很奇妙,但是工作表有时也会创build默认的分页符。 有什么方法可以使用这个模块删除默认的分页符? 感谢您提供任何帮助! 如果需要,我可以提供一些我的代码集。

perl:用Win32 :: OLE保存工作簿是不可能的

我已经简化了脚本(我不能改变Win32:OLE) use warnings; use strict; use Cwd; use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; my $excel = Win32::OLE->new('Excel.Application'); my $workbook = $excel->Workbooks->Add; my $worksheet = $workbook->Worksheets(1); $worksheet->Range("B1")->{Value} ="Hello"; $worksheet->Range("C2")->{Value} ="World"; # Get current directory using Cwd.pm my $saveTo = cwd(); $saveTo = $saveTo . '/HelloWorld.xls'; print "$saveTo\n"; $workbook->SaveAs($saveTo); undef $workbook; 它会产生以下输出: D:/workspace/perl/HW_XLS/HelloWorld.xls 所以我假设保存path是正确的。 但它不会创build一个文件。 如果我添加$workbook->Close(); 至less要求closures工作簿。 […]