Excel 转表 (转换)

摘要

Microsoft Excel 文件转换为表。

使用情况

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

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

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

参数

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

要转换的 Excel 文件。

File
输出表

输出表。

Table
工作表或命名区域
(可选)

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

.xlsx 文件支持命名区域。 仅支持具有单个区域的命名区域(例如 Sheet!A1:B5);不支持具有多个区域的命名区域(例如 Sheet!A1:B5,Sheet!D1:D5)。

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

要转换的 Excel 文件。

File
Output_Table

输出表。

Table
Sheet
(可选)

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

.xlsx 文件支持命名区域。 仅支持具有单个区域的命名区域(例如 Sheet!A1:B5);不支持具有多个区域的命名区域(例如 Sheet!A1:B5,Sheet!D1:D5)。

String
field_names_row
(可选)

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

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

如果 Sheet 参数值为命名区域,则此参数的值将设置为命名区域的最小行号。 该值还将限制为命名区域的最小和最大行号。

为避免将任何行的值用作字段名称,请将此参数设置为 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 - 两个单元格都必须具有有效的单元格标识符:字母和数字。

仅当 Sheet 参数值为工作表时,才会启用此参数。

String

代码示例

ExcelToTable 示例(Python 窗口)

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

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

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.conversion.ExcelToTable(in_excel, out_table, sheet)

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

许可信息

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

相关主题