簡體   English   中英

使用 python 從 Oracle 導出數據時 Excel 崩潰

[英]Excel crashed while exporting the data from Oracle using python

下面的代碼用於使用 Python 將 Oracle 數據提取為 xlsx 格式,代碼運行成功但是當我打開 xlsx 文件時出現錯誤:

“文件格式或文件擴展名無效。驗證文件沒有損壞並且文件擴展名與文件格式匹配。”

我應該在下面的代碼中更改什么來獲取沒有 excel 崩潰的數據。

    import xlsxwriter
    from xlsxwriter import Workbook
    import cx_Oracle
    import datetime
    from datetime import date
    
    dsn_tns = cx_Oracle.makedsn('HOST', 'port', sid='sid') 
    conn = cx_Oracle.connect(user=r'username', password='password', dsn=dsn_tns)
    cursor = conn.cursor()
    xlsx_file = open("path.xlsx", "w")
    writer = xlsxwriter.Workbook("path.xlsx")
    worksheet = writer.add_worksheet()
    sql ='''
        SELECT * 
                FROM ( SELECT  STRGUID,ACTIVITYUSERID,ACTIVITYSESSIONID,ACTIVITYCODE,SERVERNAME,APPNAME,STARTTIME,ENDTIME,STRDESCRIPTION,
    (To_Date('12/30/1899', 'MM/DD/YYYY HH24:MI:SS')+ STARTTIME)Decoded_Date
    
                      FROM tablename
                    )SUB
                WHERE SUB.Decoded_Date between to_date('26-APR-2020', 'DD-MON-YYYY')
                      and to_date('26-JUN-2020', 'DD-MON-YYYY')
                      '''
                    
    cursor.execute(sql)
    for r, row in enumerate(cursor.fetchall()):
         for c, col in enumerate(row):
              worksheet.write(r, c, col)
    
    cursor.close()
    conn.close()
    xlsx_file.close()

我嘗試了以下代碼並成功使用 python 將 oracle 中的數據導出為 xlsx 格式:

import xlsxwriter
from xlsxwriter import Workbook
import cx_Oracle
import datetime
from datetime import date
import os
import logging
import sys
import getopt
import traceback

## Define Function
def writeToExcel(cur_sor):
    
    workbook = xlsxwriter.Workbook('path.xlsx')
    worksheet = workbook.add_worksheet("DATA") #Add a New Worksheet Name - 
    
 
    for row, row1 in enumerate(cur_sor.fetchall()):
        
    
         for col, col1 in enumerate(row1):
             
              
              worksheet.write(row, col, col1)
        

    workbook.close() 


def setSqlCommand():
    
    
    sqlCommand = '''
    SELECT * 
            FROM
                ( SELECT LROWNUM,DTIMESTAMP,LSCENARIO,LYEAR,LPERIOD,
                      LENTITY,LPARENT,LVALUE,LACCOUNT,LICP,LCUSTOM1,
                      LCUSTOM2,STRUSERNAME,STRSERVERNAME,
                      LACTIVITY,DDATAVALUE,BNODATA,
                      To_Date('12/30/1899','MM/DD/YYYY') +
                          DTIMESTAMP as Decoded_Date
                  FROM tablename
                ) SUB
            WHERE SUB.Decoded_Date 
                  <= to_date('28-JUN-2020', 'DD-MON-YYYY')
                  '''
    return sqlCommand


# Function to Execute Sql commands over TNS
def runSqlTNS (sqlCommand, username, password , hostName, portNumber, sID):
    
    
        
    dsn_tns = cx_Oracle.makedsn('HOST', 'PORT', sid='SERVICEID') 
    
    db = cx_Oracle.connect(user=r'USERNAME', password='PASSWORD', dsn=dsn_tns)
    
    cursor = db.cursor()
    cursor.execute(sqlCommand)
 
    return cursor

def main(argv=None):

#Setup Logging Information
        logging.basicConfig(filename='PATH/myapp.log', level=logging.INFO, format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
        logging.info('Started')

        username = 'USERNAME'
        password = 'PASSWORD'
        #Define dsn entries to create a tns connection
        hostName = 'HOST'
        portNumber = 'PORT'
        sid = 'SERVICEID'
        #
        try:
                sqlCommand = setSqlCommand()
        except Exception as e:
                logging.info('Function - sqlCommand - In Exception')
                logging.info(traceback.print_exc())

        try:
            
            
            c = runSqlTNS(sqlCommand, username, password , hostName, portNumber, sid)
        except Exception as e:
                logging.info('Function - runSql In Exception')
                logging.info(traceback.print_exc())
        try:
            
            writeToExcel(c) # Send the Cursor to writetoExcel Function
            c.close()
        except Exception as e:
                logging.info('Function - writeToExcel In Exception')
                logging.info(traceback.print_exc())

if __name__ == "__main__":

    main(sys.argv)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM