スプレッドシートの名前(タブの下部にある名前)のみを印刷することはできますか?かなりの数のスプリーシート(500以上、えーと、音楽のカタログです... CD、その内容、作曲家、指揮者、動き、時間など)が入ったワークブックを持っていて、ブックのすべての部分ではなく、の名前。はい、Accessでこれを行う必要があることはわかっていますが、64年前にCommidoreで開始し、進行中に「変換」してきました。最新バージョンはExcel2007にあります。したがって、基本的には、Accessで実行される「3Dデータベース」ではなく、スプレッドシートを使用して実行される「2Dデータベース」です。多くの点。
5 に答える
VBAを使用すると、シート名のリストをブック内の新しいシートに非常に簡単にダンプできます。
Sub PrintSheetNames()
i=1
For Each sht in Sheets
Cells(i,1).Value = sht.Name
i=i+1
Next
End Sub
空白のワークシートに移動して、このマクロを実行します。最初の列にすべてのワークシート名が出力されます。その後、リストを印刷するだけです。
.NETではなくVBAを使用していると仮定すると、これに似たサブルーチンを作成できます。同じオブジェクトと名前が.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";
}
ExcelブックにOleDbConnectionを作成してから、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 で新しく追加されました。前もってすべてのワークシートを解析しないことで、時間とメモリを節約できます。on_demand=True
以前のバージョンを使用している場合は、上記のスニペットでアップグレードまたは削除してください。