Écrivez une ligne d'en-tête dans un Excel en fonction d'une requête Oracle

J'essaie de find un moyen efficace d'écrire une ligne d'en-tête dans un file xls de ma table Oracle plutôt que d'avoir à le faire à chaque fois, car certains de mes résultats sont de 50 à 70 colonnes.

headings1 = ['Column 1', 'Column 2', etc] rowx = 0 for colx, value in enumerate(headings1): sheet1.write(rowx,colx,value) 

Mon code actuel n'écrira que les lignes de données à partir de la ligne 2 parce que j'ai créé manuellement un model de file Excel qui contient tous les noms de feuilles et les lignes d'en-tête prédéfinis, mais c'est beaucoup de travail pour créer le model et je veux get Débarrassez-vous de cette partie et requestz-lui d'écrire automatiquement la ligne 1 comme mon en-tête.

 Import CX_Oracle Import xlwt Import xlutils.copy Import xlrd SQL = "SELECT Column1, Column2, etc from TABLE" cursor = con.cursor() cursor.execute(SQL) wb_read = xlrd.open_workbook('Template.xls',formatting_info=True) wb_read.Visible = 1 wb_write = copy(wb_read) sheet0 = wb_write.get_sheet(0) for i, row in enumerate(cursor): for j, col in enumerate(row): sheet1.write(i+1,j,col) #Starts pasting the data at row 2 book.save('Output.xls') 

Le file actuel comprend 5 à 7 feuilles sur lesquelles je dois écrire des données dans le même classur et 5 à 7 sliders utilisés. Ceci est un exemple du premier slider.

PEP 249 permet un atsortingbut de .description des objects de slider , qui a été implémenté dans cx_Oracle .

Cela renvoie une list, des tuples dans lesquels le premier élément de chaque tuple est le nom de la colonne:

 >>> db = cx_Oracle.connect('schema/pw@db/db') >>> curs = db.cursor() >>> sql = "select * from dual" >>> curs.execute(sql) <__builtin__.OracleCursor on <cx_Oracle.Connection to schema@db/db>> >>> column_names = curs.description >>> column_names [('DUMMY', <type 'cx_Oracle.STRING'>, 1, 1, 0, 0, 1)] >>> 

Pour démontrer une situation (très) un peu plus compliquée, j'ai créé cette table:

 SQL> create table tmp_test (col1 number, col2 varchar2(10)); Table created. 

C'est à vous de savoir comment vous l'utilisez:

 >>> sql = "select * from tmp_test" >>> curs.execute(sql) <__builtin__.OracleCursor on <cx_Oracle.Connection to schema@db/db>> >>> curs.description [('COL1', <type 'cx_Oracle.NUMBER'>, 127, 22, 0, -127, 1), ('COL2', <type 'cx_Oracle.STRING'>, 10, 1 0, 0, 0, 1)] >>> ','.join(c[0] for c in curs.description) 'COL1,COL2' >>> 

Il suffit d'écrire cette ligne avant de commencer à énumérer vos valeurs de slider.

Je devais faire exactement la même chose. On a obtenu le code suivant:

 # Write header row for c, col in enumerate(cursor.description): ws.write(0, c, col[0]) 

Ensuite, j'ai écrit les loggings de données à l'aide d'une simulation pour la boucle que vous utilisez déjà.