Excel 转表 (转换)

摘要

将 Microsoft Excel 文件转换为表。

使用情况

  • 支持 Excel 工作簿 (.xlsx) 和 Microsoft Excel 5.0/95 工作簿 (.xls) 格式作为输入。

  • 输出字段数据类型基于输入列范围中的值和像元格式。 输出字段数据类型包括双精度型、长整型、文本和日期。 如果输入列包含多个数据类型或格式类型,则输出字段的类型为文本。

  • 输入 Excel 单元格中的“#N/A”值将转换为 null。 如果输出表格式(例如 dBASE 表)不支持 null,则将使用另一个值(0(整型字段)或空字符串(文本字段))。

参数

标注说明数据类型
输入 Excel 文件

要转换的 Microsoft Excel 文件。

File
输出表

输出表。

Table
工作表
(可选)

要导入的 Excel 文件中特定工作表的名称。 如果未指定,则使用工作簿中的第一个工作表。

String
要用作字段名称的行
(可选)

Excel 工作表中包含要用作字段名称的值的行。 默认值为 1。

将记录转换为输出表时,会跳过指定的行。

为避免将任何行的值用作字段名称,请将此参数设置为 0,从而将使用列字母来命名输出字段(例如,COL_ACOL_BCOL_C)。

如果特定列中的单元格为空,则输出字段名称将基于列字母。 例如,如果输入有三列,并且该行分别在 A、B 和 C 列中包含 "city""""country",则输出表的字段名称将为:cityCOL_Bcountry

Long
单元格区域
(可选)

要包含的单元格范围。

单元格是行和列的交叉点。 列由字母(A、B、C、D)标识,行由数字(1、2、3、4)标识。 每个单元格都有一个基于其列和行的地址。 例如,单元格 B9 是 B 列和第 9 行的交叉点。

单元格范围使用左上单元格和右下单元格定义一个矩形,并用冒号 (:) 进行分隔。 单元格范围将被包括在内,因此 A2:C10 的范围将包括 A 到 C 列中第 2 到 10 行中的所有值。

无论在单元格范围中指定的行如何,输出字段名称都是从第 1 行中的单元格值派生的。 例如,如果指定的单元格范围是 B2:D10,则字段名称将基于单元格 B1、C1 和 D1 中的值。

以下是有效单元格范围的示例:

  • A2:C10 - A 到 C 列中第 2 到 10 行的值。
  • B3:B40 - B 列中第 3 到 40 行的值。
  • D5:X5 - D 到 X 列中第 5 行的值。
  • E200:ALM20000 - E 列到 ALM(第 1000 列)中第 200 到 20000 行的值。

以下是无效单元格范围的示例:

  • A20:C10 - 第一个单元格不能比第二个单元格低(具有较大的行号)。
  • Z3:B5 - 第一个单元格不能在第二个单元格的右侧(具有较大的列字母)。
  • A5:G - 两个单元格都必须具有有效的单元格标识符:字母和数字。

String

arcpy.conversion.ExcelToTable(Input_Excel_File, Output_Table, {Sheet}, {field_names_row}, {cell_range})
名称说明数据类型
Input_Excel_File

要转换的 Microsoft Excel 文件。

File
Output_Table

输出表。

Table
Sheet
(可选)

要导入的 Excel 文件中特定工作表的名称。 如果未指定,则使用工作簿中的第一个工作表。

String
field_names_row
(可选)

Excel 工作表中包含要用作字段名称的值的行。 默认值为 1。

将记录转换为输出表时,会跳过指定的行。

为避免将任何行的值用作字段名称,请将此参数设置为 0,从而将使用列字母来命名输出字段(例如,COL_ACOL_BCOL_C)。

如果特定列中的单元格为空,则输出字段名称将基于列字母。 例如,如果输入有三列,并且该行分别在 A、B 和 C 列中包含 "city""""country",则输出表的字段名称将为:cityCOL_Bcountry

Long
cell_range
(可选)

要包含的单元格范围。

单元格是行和列的交叉点。 列由字母(A、B、C、D)标识,行由数字(1、2、3、4)标识。 每个单元格都有一个基于其列和行的地址。 例如,单元格 B9 是 B 列和第 9 行的交叉点。

单元格范围使用左上单元格和右下单元格定义一个矩形,并用冒号 (:) 进行分隔。 单元格范围将被包括在内,因此 A2:C10 的范围将包括 A 到 C 列中第 2 到 10 行中的所有值。

无论在单元格范围中指定的行如何,输出字段名称都是从第 1 行中的单元格值派生的。 例如,如果指定的单元格范围是 B2:D10,则字段名称将基于单元格 B1、C1 和 D1 中的值。

以下是有效单元格范围的示例:

  • A2:C10 - A 到 C 列中第 2 到 10 行的值。
  • B3:B40 - B 列中第 3 到 40 行的值。
  • D5:X5 - D 到 X 列中第 5 行的值。
  • E200:ALM20000 - E 列到 ALM(第 1000 列)中第 200 到 20000 行的值。

以下是无效单元格范围的示例:

  • A20:C10 - 第一个单元格不能比第二个单元格低(具有较大的行号)。
  • Z3:B5 - 第一个单元格不能在第二个单元格的右侧(具有较大的列字母)。
  • A5:G - 两个单元格都必须具有有效的单元格标识符:字母和数字。

String

代码示例

Excel 转表 (ExcelToTable) 示例(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 ExcelToTable 函数。

import arcpy
arcpy.env.workspace = "c:/data"
arcpy.ExcelToTable_conversion("data.xls", "outgdb.gdb", "Sheet1")
Excel 转表 (ExcelToTable) 示例 2(独立脚本)

将 Microsoft Excel 文件的各个工作表导入地理数据库的各个表中。

import os
import xlrd
import openpyxl
import arcpy

def importallsheets(in_excel, out_gdb):
    if in_excel.endswith(".xlsx"):
        workbook = openpyxl.load_workbook(in_excel)
        sheets = workbook.sheetnames
    elif in_excel.endswith(".xls"):
        workbook = xlrd.open_workbook(in_excel)
        sheets = [sheet.name for sheet in workbook.sheets()]
    else:
        print("An Excel Workbook of format .xls or .xlsx is required.")
        return

    print('{} sheets found: {}'.format(len(sheets), ','.join(sheets)))
    for sheet in sheets:
        # The out_table is based on the input Excel file name
        # an underscore (_) separator followed by the sheet name
        out_table = os.path.join(
            out_gdb,
            arcpy.ValidateTableName(
                "{0}_{1}".format(os.path.basename(in_excel), sheet),
                out_gdb))

        print('Converting {} to {}'.format(sheet, out_table))

        # Perform the conversion
        arcpy.ExcelToTable_conversion(in_excel, out_table, sheet)

if __name__ == '__main__':
    importallsheets('c:/data/data.xls',
                    'c:/data/outgdb.gdb')

许可信息

  • Basic: 是
  • Standard: 是
  • Advanced: 是

相关主题