python 程序(Excel固定格式转数据库建表语句)

235 阅读1分钟
# coding=utf-8
import xlwings as xw
import time

start_row = 10  # 处理Excel文件开始行
end_row = 59  # 处理Excel结束行

# 记录打开表单开始时间
start_open_time = time.time()

# 指定不显示地打开Excel,读取Excel文件
print('读取 Excel 文件')
app = xw.App(visible=False, add_book=False)

# wb = app.books.open('D:/PYTHON/TEST_CODE/Book300s.xlsx') # 打开Excel文件
excel_path = 'C:/Users/15526414163/Desktop/pyfile/数据建模v3.xlsx'
wb = app.books.open(excel_path)

# 文件的sheet总数
sheetslen = len(wb.sheets)

# sql语句字符串
sql_str = ''

for sheetspag in range(1, sheetslen - 2):
    sheet = wb.sheets[sheetspag]  # 第N个表单
    sheet_str = str(sheetspag)

    # 表英文名
    tableEName = sheet.range('B3').value

    # 表中文名
    tableCName = sheet.range('B2').value

    # 创建表头 ps:小括号需要用f"("转义,否则会报元组不能拼接的错误
    sql_str = sql_str + 'CREATE TABLE IF NOT EXISTS ' + 'PDATA.' + tableEName + f" (\n"
    for row in range(10, 200):
        row_str = str(row)
        # 获取 A 列的值
        rowvalue = sheet.range('A' + row_str).value
        # print(rowvalue)

        if rowvalue == None:
            break
        else:
            # 获取 C 列中的值
            value1 = sheet.range('C' + row_str).value
            # print('value1 ' , value1)

            # 获取 E 列中的值
            value2 = sheet.range('E' + row_str).value
            # print('value2 ' , value2)

            # 获取 D 列中的值
            value3 = sheet.range('D' + row_str).value
            # print('value3 ' , value3)

            # 如果 C 列中的值或 E 列中的值为空,则不进行拼接操作
            if value1 != None or value2 != None:
                if row > 10:
                    sql_str = sql_str + '    ,' + value1 + ' ' + value2 + ' COMMENT ' + f"'{value3}'\n"
                else:
                    sql_str = sql_str + '    ' + value1 + ' ' + value2 + ' COMMENT ' + f"'{value3}'\n"

    sql_str = sql_str + f") COMMENT " + f"'{tableCName}'\n"
    sql_str = sql_str + 'STORED AS PARQUET;\n'
    sql_str = sql_str + '------------------------------------------------------\n'

file_name = 'create_table_sql_' + time.strftime("%Y%m%d%H%M%S", time.localtime()) + '.txt'
output = 'C:/Users/15526414163/Desktop/pyfile/' + file_name

# 将拼接的字符串存储到文件中
with open(output, mode='a', encoding='utf-8') as f:
    f.write(sql_str)

print(file_name + "写入完成")

# 将应用程序设置为活动的Excel实例
# app = xw.apps.active

# 保存文件
wb.save()
print("保存 Excel 文件完成")

# 关闭工作簿
# wb.close()

# 退出Excel
app.quit()

# 终止进程,强制退出
app.kill()

print("Excel 文件已退出")