需求:将excel表中的数据通过PYTHON脚本编写,每日自动导入到oracle数据库相应的一张表格中。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需求:将excel表中的数据通过PYTHON脚本编写,每日自动导入到oracle数据库相应的一张表格中。相关的知识,希望对你有一定的参考价值。

每天都会往一张excel表中添加数据,需要写一个PYTHON(必须是通过PYTHON脚本),将数据每天固定时间自动导入到oracle中的一张表。其中,表结构和excel字段一一对应,无需做调整

目前只有一个办法。通过excel的COM接口。不管是WORD还是EXCEL,都可以用这个方法来操作。不过COM接口的文档不是很好找。你可以到它们里的VBA帮助里找出来,然后试验一下。

COM接口本来就是给C++用的。如果用python写尽量多加一些防出错机制。

许多年前做过一个简易的OA系统,就是生成EXCEL文档。前两年又做过一个小项目,是将EXCEL里的数据读出后转换出来。至于oracle,直接用pymysql或者是mysqldb就可以访问。安装一个oracle的驱动。现在都容易找到。

大约开发时间1天左右就可以弄出来。

另外excel导入到oracle,如果不用python来写,可能会更容易些。比如Csharp。而且帮助也多些。
参考技术A 这个应该不难吧, python有对应excel的接口模块xlrd可以读excel文件。 cx_Oracle是一个用于操作oracle数据库的模块(这个没有接触, 但是如果和msqldb差不多的话就没问题)。
如果在win下的话用VBS或者JS写脚本也是不错的选择。
估计100行以内的代码就可以了。。。。
参考技术B PYTHON没玩过,excel自动导入到oracle应该要自己写个程序,让它定时运行就可以了。

通过python,将excel中的数据写入二维列表

需求:读取Excel表中数据,每行数据放在一个列表中,再把所有列表都存入到一个列表中,形成二维列表。

实现方法:导入可在Python处理Excel表格数据的模块。

excel表:


方法一:xlwings

  了解到xlwings很强大,但是折戟沉沙(本地环境问题)。

1. 写一个测试demo如下:

import xlwings as xw

# 打开excel,参数visible表示处理过程是否可视,add_book表示是否打开新的Excel程序
with xw.App(visible=True, add_book=False) as app:
    # 创建一个工作薄
    book = app.books.add()
    # 工作薄中创建一个sheet表
    sht = book.sheets.add()
    # 向表格的A1单元格写入“Hello Python”
    sht.range(\'A1\').value = \'Hello Python\'
    # 保存
    book.save(\'./test.xlsx\')

2. 代码执行结果:

"D:\\Program Files\\python3\\python.exe" "D:\\Program Files\\python3\\Zyl\\demo71.py" 
Traceback (most recent call last):
  File "D:\\Program Files\\python3\\Zyl\\demo71.py", line 4, in <module>
    with xw.App(visible=True, add_book=False) as app:
  File "D:\\Program Files\\python3\\lib\\site-packages\\xlwings\\main.py", line 294, in __init__
    self.impl = engines.active.apps.add(
  File "D:\\Program Files\\python3\\lib\\site-packages\\xlwings\\main.py", line 203, in add
    return App(impl=self.impl.add(**kwargs))
  File "D:\\Program Files\\python3\\lib\\site-packages\\xlwings\\_xlwindows.py", line 497, in add
    return App(spec=spec, add_book=add_book, xl=xl, visible=visible)
  File "D:\\Program Files\\python3\\lib\\site-packages\\xlwings\\_xlwindows.py", line 521, in __init__
    self._xl = COMRetryObjectWrapper(DispatchEx("Excel.Application"))
  File "D:\\Program Files\\python3\\lib\\site-packages\\win32com\\client\\__init__.py", line 145, in DispatchEx
    dispatch = pythoncom.CoCreateInstanceEx(
pywintypes.com_error: (-2147024894, \'系统找不到指定的文件。\', None, None)

Process finished with exit code 1

  百度搜索该问题,很多回答都是说安装了WPS导致的该问题,我的电脑并未安装WPS,无法用网上搜索到的解决方案解决。还有的说要根据报错修改源码,比较麻烦,放弃。


方法二:xlrd

  该方法可将excel数据转化为二维列表,但是列表的中的数据格式发生变异。

1. 代码实现如下:

import xlrd
# coding=utf-8

#读取文件
def read_excel(files, sheet, row):
    try:
        workbook = xlrd.open_workbook(files)
        table = workbook.sheet_by_name(sheet)
        nrows = table.nrows  # 表的行数
        value_list = []
        for i in range(row, nrows):
            rowvalue = table.row_values(i)[0:5]
            value_list.append(rowvalue)
        print(value_list)
        return value_list

    except:
        print(\'文件读取失败!\')
# 调用函数
read_excel(r\'D:\\Program Files\\python3\\Zyl\\sgs2.xls\',\'压测结果\',2)

2. 代码执行结果:

  时间、数字的格式不对,再转化比较麻烦,该方法舍弃。


方法三:openpyxl

  这也是一款强大的工具,满足当前需求,采用。

1. 代码实现如下:

import openpyxl

#读取文件
def read_excel(files, sheet):
    try:
        my_list = []  # 按行存放Excel表中数据
        wb = openpyxl.load_workbook(files)
        ws = wb[sheet]
        maxrows = ws.max_row  # 获取最大行
        for i in range(maxrows-2):
            temp_list = []
            for each in ws.iter_cols( max_col=5,min_row=3):
                temp_list.append(each[i].value)
            my_list.append(temp_list)

        print(my_list)
        print(ws)
        return my_list

    except:
        print(\'文件读取失败!\')
# 调用函数
read_excel(r\'result.xlsx\',\'压测结果\')

2. 代码执行结果:

  excel表中的数据写入到列表中后,格式没有发生变化。 nice!!! 

以上是关于需求:将excel表中的数据通过PYTHON脚本编写,每日自动导入到oracle数据库相应的一张表格中。的主要内容,如果未能解决你的问题,请参考以下文章

如何将MYSQL中数据导出到EXCEL表中 python 脚本?

如何编写执行预定义查询以将数据加载到工作表中的办公脚本?

如何在两个excel表中查找相同数据

如何使用 Python 脚本为 Excel 工作表中的值形成一对多关系?

excel工作表中的超级脚本没有出现在asp.net的数据集中

用于在 Excel 表中进行日期比较的 Python 脚本 [关闭]