1

是否可以只打印电子表格名称(选项卡底部的名称)?我有一本包含很多电子表格的工作簿(超过 500 个,呃,这是一个音乐目录……CD,上面有什么,作曲家,指挥家,乐章,时代等),并且想打印出来工作簿的所有部分的名称,而不是所有部分的名称。是的,我知道我很可能应该在 Access 中执行此操作,但 64 年前我在 Commidore 上开始使用它,并且一直在“转换”它。最新版本在 Excel 2007 中。所以本质上它是使用电子表格完成的“2D 数据库”,而不是在 Access 中完成的“3D 数据库”。许多问候。

4

5 回答 5

3

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

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

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

于 2009-07-04T14:02:41.333 回答
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
于 2009-07-04T14:03:30.847 回答
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";
}
于 2009-07-04T14:02:18.260 回答
0

您可以创建一个 OleDbConnection 到您的 Excel 工作簿,然后调用 GetOleDbSchemaTable 以获取所有表的列表,这些表只是 Excel 工作表的列表

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

于 2009-07-04T14:06:32.027 回答
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_demandarg 是 0.7.1 版本中的新参数;它通过不预先解析所有工作表来节省时间和内存。如果您有较早的版本,请on_demand=True在上面的代码段中升级或删除。

于 2009-07-05T06:28:29.673 回答