仅在工作簿中打印所有电子表格名称

是否可以仅打印电子表格名称(标签底部的名称)? 我有一个有很多spreasheets的工作簿(超过500,呃,这是一个音乐目录… CD,他们是什么,composer php,指挥,动作,时间等),并希望打印出来的只是工作簿的全部和部分的名称。 是的,我知道我应该在Access中做更多的事情,但是我在64年前开始在Commidore上工作,在我走的时候刚刚“转换”它。 最新版本是在Excel 2007中。因此本质上它是使用电子表格完成的“2D数据库”,而不是在Access中完成的“3D数据库”。 很多方面。

使用VBA,您可以非常轻松地将工作表名称转换为工作簿中的新工作表。

Sub PrintSheetNames() i=1 For Each sht in Sheets Cells(i,1).Value = sht.Name i=i+1 Next End Sub 

转到任何空白工作表,然后运行此macros。 它将输出第一列中的所有工作表名称。 然后你可以打印列表。

假设你使用VBA而不是.NET,你可以写一个类似于这个的子例程。 .NET中有相同的对象和名称。

 Sub ShowTabNames() Dim s As Worksheet Dim tabs As String For Each s In ActiveWorkbook.Worksheets If Len(tabs) > 0 Then tabs = tabs & ", " tabs = tabs & s.Name Next MsgBox tabs End Sub 

您可以使用安装了Spreadsheet :: ParseExcel模块的Perl来执行此操作。

 use Spreadsheet::ParseExcel; use strict; my $filename = shift || "Book1.xls"; my $e = new Spreadsheet::ParseExcel; my $eBook = $e->Parse($filename); my $sheets = $eBook->{SheetCount}; my ($eSheet, $sheetName); foreach my $sheet (0 .. $sheets - 1) { $eSheet = $eBook->{Worksheet}[$sheet]; $sheetName = $eSheet->{Name}; print "Worksheet $sheet: $sheetName\n"; } 

您可以将一个OleDbConnection连接到您的Excel工作簿,然后调用GetOleDbSchemaTable来获取所有表格的列表,这些表格只不过是Excel表格列表

ExcelConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,new object [] {null,null,null,“TABLE”});

您可以使用安装了xlrd模块的Python来执行此操作:

 import xlrd, sys filename = (sys.argv[1:2] or ['Book1.xls'])[0] book = xlrd.open_workbook(filename, on_demand=True) for name in book.sheet_names(): print name # name is in Unicode; may need encoding 

注意: on_demand arg在0.7.1版本中是新的; 它可以通过不先parsing所有的工作表来节省时间和内存。 如果您的版本较早,请在上面的代码段中升级或删除on_demand=True