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