【问题标题】:Printing all spreadsheet names only in a workbook仅在工作簿中打印所有电子表格名称
【发布时间】:2009-07-04 13:47:22
【问题描述】:

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

【问题讨论】:

    标签: database excel 2d excel-2007


    【解决方案1】:

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

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

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

    【讨论】:

    • 在 sht 上启用 Intellisense。将Dim sht As Worksheet 添加到Sub 的顶部。
    • 做到了!我非常感谢你!非常感谢。 {:o)
    【解决方案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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-07
          • 2010-10-21
          • 1970-01-01
          相关资源
          最近更新 更多