是否可以只打印电子表格名称(选项卡底部的名称)?我有一本包含很多电子表格的工作簿(超过 500 个,呃,这是一个音乐目录……CD,上面有什么,作曲家,指挥家,乐章,时代等),并且想打印出来工作簿的所有部分的名称,而不是所有部分的名称。是的,我知道我很可能应该在 Access 中执行此操作,但 64 年前我在 Commidore 上开始使用它,并且一直在“转换”它。最新版本在 Excel 2007 中。所以本质上它是使用电子表格完成的“2D 数据库”,而不是在 Access 中完成的“3D 数据库”。许多问候。
ADRIAN WARNES
问问题
1432 次
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_demand
arg 是 0.7.1 版本中的新参数;它通过不预先解析所有工作表来节省时间和内存。如果您有较早的版本,请on_demand=True
在上面的代码段中升级或删除。
于 2009-07-05T06:28:29.673 回答