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

时间:2009-07-04 13:47:23

标签: database excel 2d excel-2007

是否可以仅打印电子表格名称(选项卡底部的名称)? 我有一本有很多spreasheets的工作簿(超过500,呃,它是音乐目录...... CD,它们是什么,作曲家,指挥,动作,时间等)并且想要打印出来的工作簿的名称,而不是全部和部分。 是的,我知道我应该更多地在Access中这样做,但是我在64年前在Commidore上创建了它,并且在我继续进行时正在“转换”它。最新版本在Excel 2007中。因此,它实际上是使用电子表格完成的“2D数据库”,而不是在Access中完成的“3D数据库”。 很多问候。

5 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

假设您使用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

答案 2 :(得分:1)

您可以使用安装了 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";
}

答案 3 :(得分:0)

您可以为您的Excel工作簿创建OleDbConnection,然后调用GetOleDbSchemaTable以获取除excel表列表之外的所有表的列表

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

答案 4 :(得分:0)

您可以使用安装了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版本中的新增内容;它可以通过不预先解析所有工作表来节省时间和内存。如果您使用的是早期版本,请升级或删除上面代码段中的on_demand=True