Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python脚本跳过excel文件中的标题行_Python_Excel_Header_Skip - Fatal编程技术网

Python脚本跳过excel文件中的标题行

Python脚本跳过excel文件中的标题行,python,excel,header,skip,Python,Excel,Header,Skip,我编写了一个python脚本,它将从文件夹中提取excel文件并将它们写入SQL表。我让代码正常工作,但前提是删除包含标题的excel文件的第一行。我是Python新手,所以这可能很简单,但我研究了很多不同的技术,不知道如何将其插入到代码中。任何想法都将不胜感激 # Import arcpy module from xlrd import open_workbook ,cellname import arcpy import pyodbc as p # Database Connection

我编写了一个python脚本,它将从文件夹中提取excel文件并将它们写入SQL表。我让代码正常工作,但前提是删除包含标题的excel文件的第一行。我是Python新手,所以这可能很简单,但我研究了很多不同的技术,不知道如何将其插入到代码中。任何想法都将不胜感激

# Import arcpy module
from xlrd import open_workbook ,cellname
import arcpy
import pyodbc as p

# Database Connection Info
server = "myServer"
database = "my_Tables"
connStr = ('DRIVER={SQL Server Native Client 10.0};SERVER=' + server + ';DATABASE=' + database + ';' + 'Trusted_Connection=yes')

# Assign path to Excel file
file_to_import = '\\\\Location\\Report_Test.xls'

# Assign column count
column_count=10

# Open entire workbook
book = open_workbook(file_to_import)

# Use first sheet
sheet = book.sheet_by_index(0)

# Open connection to SQL Server Table
conn = p.connect(connStr)

# Get cursor
cursor = conn.cursor()

# Assign the query string without values once, outside the loop
query = "INSERT INTO HED_EMPLOYEE_DATA (Company, Contact, Email, Name, Address, City, CentralCities, EnterpriseZones, NEZ, CDBG) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"

# Iterate through each row

for row_index in range(sheet.nrows):

    row_num          = row_index
    Company          = sheet.cell(row_index,0).value
    Contact          = sheet.cell(row_index,1).value
    Email            = sheet.cell(row_index,2).value
    Name             = sheet.cell(row_index,3).value
    Address          = sheet.cell(row_index,4).value
    City             = sheet.cell(row_index,5).value
    CentralCities    = sheet.cell(row_index,6).value
    EnterpriseZones  = sheet.cell(row_index,7).value
    NEZ              = sheet.cell(row_index,8).value
    CDBG             = sheet.cell(row_index,9).value

    values = (Company, Contact, Email, Name, Address, City, CentralCities, EnterpriseZones, NEZ, CDBG)

    cursor.execute(query, values)

# Close cursor
cursor.close()

# Commit transaction
conn.commit()

# Close SQL server connection
conn.close()

您可以在第二行初始化迭代。请尝试以下操作:

for row_index in range(1,sheet.nrows):
编辑:如果您需要迭代.xls文件列表,正如您在注释中所要求的那样,基本思想是对文件执行外部循环。这里有一些提示:

# You need to import the os library. At the beinning of your code
import os

...
# Part of your code here
...

# Assign path to Excel file
#file_to_import = '\\\\Location\\Report_Test.xls'
folder_to_import = '\\\\Location'
l_files_to_import = os.listdir(folder_to_import)
for file_to_import in l_files_to_import:
    if file_to_import.endswith('.xls'):
        # The rest of your code here. Be careful with the indentation!
        column_count=10
        ...
或者如果你很懒:

rows = 0
for row in ws.rows :
    if rows == 0 : 
        rows += 1
        continue
    ...

这样做的好处是,您不必愚弄复杂的单元格解引用:您拥有row对象,只需执行
row[col].value
。整洁。

听起来你只需要将范围内的行索引(sheet.nrows)的
更改为范围内的行索引(1,sheet.nrows):
以跳过第一行。Excel中没有显示“这是一个标题行”,所以你要么知道要跳过多少行(Aya的注释),要么猜测。Aya,它工作得非常出色!非常感谢。我觉得这是很明显的事情,我只是想了想。如果我想更进一步,选择文件夹中的所有excel文件。。。。它会像“*.xls”一样吗?我试过了,但它似乎不喜欢我的语法。你需要一个外部循环来迭代文件。您可以执行命令列出所有文件,然后对它们进行迭代。这将是一个你已经拥有的外部循环,在脚本中我将把外部循环放在哪里?我正在考虑将文件_更改为_import,使其仅指向包含所有XLS文件的文件夹,然后立即启动外部循环。对不起,我对python很陌生。嘿,米克尔,谢谢你的帮助!阻止脚本运行的唯一原因是我得到了一个“IOError:[Errno 13]权限被拒绝”。我已将所有权限正确设置为它试图读取的XLS文件所在的文件夹,因此我不确定问题出在哪里。