使用Win32 :: OLE模块操作Windows Excel的Perl命令列表

有没有人的Perl命令的列表来操纵基本的Win32 :: OLE模块在Windows上的Excel? 特别是,我正在考虑以下的操作:

  • 打开并保存Excel文件
  • 读取/更新值
  • 阅读/更新公式
  • 改变格式,边界
  • 添加/编辑超链接
  • 列出工作表
  • 等等…

这是我用Win32模块在Excel上编写脚本时所收集的操作列表。 我想分享。

随意评论/编辑,以改善。

1.打开和保存Excel /工作簿

#Modules to use use Cwd 'abs_path'; use Win32::OLE; use Win32::OLE qw(in with); use Win32::OLE::Const "Microsoft Excel"; $Win32::OLE::Warn = 3; #Need to use absolute path for Excel files my $excel_file = abs_path("$Excel_path") or die "Error: the file $Excel_path has not been found\n"; # Open Excel application my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); # Open Excel file my $Book = $Excel->Workbooks->Open($excel_file); #Make Excel visible $Excel->{Visible} = 1; #___ ADD NEW WORKBOOK my $Book = $Excel->Workbooks->Add; my $Sheet = $Book->Worksheets("Sheet1"); $Sheet->Activate; #Save Excel file $Excel->{DisplayAlerts}=0; # This turns off the "This file already exists" message. $Book->Save; #Or $Book->SaveAs("C:\\file_name.xls"); $Book->Close; #or $Excel->Quit; 

2.操作工作表

 #Get the active Worksheet my $Book = $Excel->Activewindow; my $Sheet = $Book->Activesheet; #List of Worksheet names my @list_Sheet = map { $_->{'Name'} } (in $Book->{Worksheets}); #Access a given Worksheet my $Sheet = $Book->Worksheets($list_Sheet[0]); #Add new Worksheet $Book->Worksheets->Add({After => $workbook->Worksheets($workbook->Worksheets->{Count})}); #Change Worksheet Name $Sheet->{Name} = "Name of Worksheet"; #Freeze Pane $Excel -> ActiveWindow -> {FreezePanes} = "True"; #Delete Sheet $Sheet -> Delete; 

3.操纵细胞

 #Edit the value of a cell (2 methods) $Sheet->Range("A1")->{Value} = 1234; $Sheet->Cells(1,1)->{Value} = 1234; #Edit the values in a range of cells $Sheet->Range("A8:C9")->{Value} = [[ undef, 'Xyzzy', 'Plugh' ], [ 42, 'Perl', 3.1415 ]]; #Edit the formula in a cell (2 types) $Sheet->Range("A1")->{Formula} = "=A1*9.81"; $Sheet->Range("A3")->{FormulaR1C1} = "=SUM(R[-2]C:R[-1]C)"; # Sum of rows $Sheet->Range("C1")->{FormulaR1C1} = "=SUM(RC[-2]:RC[-1])"; # Sum of columns #Edit the format of the text (font) $Sheet->Range("G7:H7")->Font->{Bold} = "True"; $Sheet->Range("G7:H7")->Font->{Italic} = "True"; $Sheet->Range("G7:H7")->Font->{Underline} = xlUnderlineStyleSingle; $Sheet->Range("G7:H7")->Font->{Size} = 8; $Sheet->Range("G7:H7")->Font->{Name} = "Arial"; $Sheet->Range("G7:H7")->Font->{ColorIndex} = 4; #Edit the number format $Sheet -> Range("G7:H7") -> {NumberFormat} = "\@"; # Text $Sheet -> Range("A1:H7") -> {NumberFormat} = "\$#,##0.00"; # Currency $Sheet -> Range("G7:H7") -> {NumberFormat} = "\$#,##0.00_);[Red](\$#,##0.00)"; # Currency - red negatives $Sheet -> Range("G7:H7") -> {NumberFormat} = "0.00_);[Red](0.00)"; # Numbers with decimals $Sheet -> Range("G7:H7") -> {NumberFormat} = "#,##0"; # Numbers with commas $Sheet -> Range("G7:H7") -> {NumberFormat} = "#,##0_);[Red](#,##0)"; # Numbers with commas - red negatives $Sheet -> Range("G7:H7") -> {NumberFormat} = "0.00%"; # Percents $Sheet -> Range("G7:H7") -> {NumberFormat} = "m/d/yyyy" # Dates #Align text $Sheet -> Range("G7:H7") -> {HorizontalAlignment} = xlHAlignCenter; # Center text; $Sheet -> Range("A1:A2") -> {Orientation} = 90; # Rotate text #Activate Cell $Sheet -> Range("A2") -> Activate; $Sheet->Hyperlinks->Add({ Anchor => $range, #Range of cells with the hyperlink; eg $Sheet->Range("A1") Address => $adr, #File path, http address, etc. TextToDisplay => $txt, #Text in the cell ScreenTip => $tip, #Tip while hovering the mouse over the hyperlink }); 

NB:要检索超链接的列表,看看下面的post从Excel工作表中获取超链接列表与Win32 :: OLE

4.行/列的操作

 #Insert a row before/after line 22 $Sheet->Rows("22:22")->Insert(xlUp, xlFormatFromRightOrBelow); $Sheet->Rows("23:23")->Insert(-4121,0); #xlDown is -4121 and that xlFormatFromLeftOrAbove is 0 #Delete a row $Sheet->Rows("22:22")->Delete(); #Set column width and row height $Sheet -> Range('A:A') -> {ColumnWidth} = 9.14; $Sheet -> Range("8:8") -> {RowHeight} = 30; $Sheet -> Range("G:H") -> {Columns} -> Autofit; # Get the last row/column my $last_row = $Sheet -> UsedRange -> Find({What => "*", SearchDirection => xlPrevious, SearchOrder => xlByRows}) -> {Row}; my $last_col = $Sheet -> UsedRange -> Find({What => "*", SearchDirection => xlPrevious, SearchOrder => xlByColumns}) -> {Column}; #Add borders (method 1) $Sheet -> Range("A3:H3") -> Borders(xlEdgeBottom) -> {LineStyle} = xlDouble; $Sheet -> Range("A3:H3") -> Borders(xlEdgeBottom) -> {Weight} = xlThick; $Sheet -> Range("A3:H3") -> Borders(xlEdgeBottom) -> {ColorIndex} = 1; $Sheet -> Range("A3:H3") -> Borders(xlEdgeLeft) -> {LineStyle} = xlContinuous; $Sheet -> Range("A3:H3") -> Borders(xlEdgeLeft) -> {Weight} = xlThin; $Sheet -> Range("A3:H3") -> Borders(xlEdgeTop) -> {LineStyle} = xlContinuous; $Sheet -> Range("A3:H3") -> Borders(xlEdgeTop) -> {Weight} = xlThin; $Sheet -> Range("A3:H3") -> Borders(xlEdgeBottom) -> {LineStyle} = xlContinuous; $Sheet -> Range("A3:H3") -> Borders(xlEdgeBottom) -> {Weight} = xlThin; $Sheet -> Range("A3:H3") -> Borders(xlEdgeRight) -> {LineStyle} = xlContinuous; $Sheet -> Range("A3:H3") -> Borders(xlEdgeRight) -> {Weight} = xlThin; $Sheet -> Range("A3:H3") -> Borders(xlInsideVertical) -> {LineStyle} = xlDashDot $Sheet -> Range("A3:H3") -> Borders(xlInsideVertical) -> {Weight} = xlMedium; $Sheet -> Range("A3:I3") -> Borders(xlInsideHorizontal) -> {LineStyle} = xlContinuous; $Sheet -> Range("A3:I3") -> Borders(xlInsideHorizontal) -> {Weight} = xlThin; #Add borders (method 2) my @edges = qw (xlInsideHorizontal xlInsideVertical xlEdgeBottom xlEdgeTop xlEdgeRight); foreach my $edge (@edges) { with (my $Borders = $Sheet->Range("A3:H3")->Borders(eval($edge)), LineStyle =>xlContinuous, Weight => xlThin , ColorIndex => 1); } #Merge Cells $Sheet -> Range("H10:J10") -> Merge; #Group Rows $Sheet -> Range("7:8") -> Group; #Hide Columns $Sheet -> Range("G:H") -> EntireColumn -> {Hidden} = "True"; 

5.其他

 #Add a name (ie reference) $Book->Names->Add($name =>"=$ref"); #Where $name points to the range $ref #Insert a picture $Sheet -> Pictures -> Insert("picture_name"); # Insert in upper-left corner $Excel -> ActiveSheet -> Pictures -> Insert("picture_name"); # Insert in active cell #Print setup $Sheet -> PageSetup -> {Orientation} = xlLandscape; $Sheet -> PageSetup -> {Order} = xlOverThenDown; $Sheet -> PageSetup -> {LeftMargin} = .25; $Sheet -> PageSetup -> {RightMargin} = .25; $Sheet -> PageSetup -> {BottomMargin} = .5; $Sheet -> PageSetup -> {CenterFooter} = "Page &P of &N"; $Sheet -> PageSetup -> {RightFooter} = "Page &P of &N"; $Sheet -> PageSetup -> {LeftFooter} = "Left\nFooter"; $Sheet -> PageSetup -> {Zoom} = 75; $Sheet -> PageSetup -> FitToPagesWide = 1; $Sheet -> PageSetup -> FitToPagesTall = 1; #Add a Page break $Excel -> ActiveWindow -> SelectedSheets -> HPageBreaks -> Add({Before => $Sheet -> Range("3:3")}); 

6.有用的链接

有关Excel上颜色的信息链接: http : //dmcritchie.mvps.org/excel/colors.htm

在这里输入图像说明

链接有关Excel常量的信息: http : //msdn.microsoft.com/en-us/library/aa221100%28office.11​​%29.aspx

从Win32 :: OLE模块链接: http : //search.cpan.org/~jdb/Win32-OLE-0.1712/lib/Win32/OLE.pm#EXAMPLES

有关Excel使用的有用信息可以在这个地址find