2008-11-18 6 views
11

J'écris une procédure pl/sql qui exporte des données d'Oracle vers Excel. J'ai besoin de formatage des données, donc je ne peux pas utiliser le format CSV. J'ai déjà essayé avec XML, mais il génère des fichiers trop volumineux lorsque je veux exporter, par exemple. 70000 lignes avec 50 colonnes (presque 300 Mo !!!). C'est pourquoi j'ai décidé d'utiliser des balises HTML pour générer un fichier XLS - il est plus petit que XML et je dois définir directement le format de certaines colonnes spéciales (les chaînes, les nombres et les dates sont formatés automatiquement par Excel). C'est très simple et pratique mais je ne peux pas définir plus d'une feuille de calcul. Savez-vous comment ajouter/définir plus d'une feuille de calcul dans un fichier Excel écrit en HTML?Oracle vers Excel - Procédure d'exportation PL/SQL

J'ai essayé d'utiliser la formule VBScript comme <% ActiveWorkbook.Worksheet.Add%>, mais cela ne fonctionne pas.

Meilleures salutations,

Przemek

+0

Mai semble obsolète, vieux fashoned et oui un peu geek, mais je préfère encore utiliser OracleReport pour le faire. Si vous avez déjà installé l'interface Forms/Report IAS en cours d'exécution. – BigMike

Répondre

4

Au lieu de créer des fichiers Excel ou HTML sur le serveur Oracle, vous pouvez récupérer les données Oracle pour document Excel existant via ODBC ou OLEDB. Le défaut est, que vous devriez être prudent avec les autorisations des utilisateurs.

https://www.youtube.com/watch?v=Adz0zZFePf8

0

Vous pouvez enregistrer une (petite) feuille Excel au format HTML dans Excel, puis reproduire ce format.

1

Vous pouvez obtenir l'utilitaire OWA-SYLK de Tom Kyte, qui prend en charge un sous-ensemble de fonctionnalités au format .xls.

+0

Je l'ai utilisé auparavant et il ne gère pas plusieurs feuilles de calcul –

0

Il existe un produit appelé SQL * XL qui vous permet d'exécuter des requêtes sql depuis Excel, et les résultats apparaissent dans la feuille de calcul (il peut également être mis à jour).

Il est commercial, pas gratuit, mais est seulement environ € 50, donc pas cher. Je l'utilise beaucoup

2

J'ai eu des problèmes similaires et, finalement, fait une feuille de calcul avec un code VBA qui interrogé et peuplé la feuille de calcul pour moi. Ma tâche consistait à exporter une série de tableaux, chacun sur une feuille différente, mais n'importe quel drapeau pouvait être utilisé pour passer à une nouvelle feuille. En tout cas, laissez-moi savoir si vous souhaitez voir le code. Voici un morceau qui pourrait vous aider. Il suffit de changer la chaîne TableSQL à ce que votre sélection devrait être. Chaque enregistrement retourné sera inséré comme une ligne dans la feuille. Ensuite, en fonction du drapeau que vous décidez, vous pouvez créer et passer à la feuille suivante. S'il vous plaît laissez-moi savoir si vous avez besoin plus d'informations (comme cet exemple particulier n'est pas exactement ce que vous faites)

Private Sub getMyRows(inSchema As String, InTable As String) 
    Dim RS As Object 
    Dim TableSQL As String 
    Dim DataType As String 
    Dim DataLength As String 
    Dim DataPrecision As String 
    Dim DataScale As String 
    Dim ColCount As Integer 
    Dim WS As Worksheet 
' create a sheet with the current table as name 
    Worksheets.Add().Name = InTable 
    Set RS = CreateObject("ADODB.recordset") 
    TableSQL = "Select * from " & inSchema & "." & InTable 
' grab the data 
    RS.Open TableSQL, conn, adOpenStatic 
    For ColCount = 0 To RS.Fields.Count - 1 
' set column headings to match table 
     ActiveSheet.Cells(1, ColCount + 1).Value = RS.Fields(ColCount).Name 
    Next 

' copy table data to sheet 
    With Worksheets(InTable).Range("A2") 
     .CopyFromRecordset RS 
    End With 
    RS.Close 

    End Sub 
0

Nous utilisons des méthodes OOXML. Nous avons d'abord écrit notre propre méthode pour le faire en PL/SQL mais un collègue a trouvé ce produit appelé Excellant. C'est vous passez dans une spécification de xml avec des mappings de colonne et des styles/formules (presque n'importe quelle formule d'Excel fonctionne), la question et elle vous renvoie un clob. Vous pouvez donc lancer gzip sur le clob si vous voulez le rendre plus petit. Le produit est assez chouette mon manager l'a acheté avec une pcard.

Le site Web est www.peak42solutions.com. Nous ne pouvions pas utiliser ODBC car les personnes du réseau n'autorisent pas l'accès directement à la base de données. Et nous envoyons maintenant la facturation par courriel à Excel aux clients.

Merci,

Bill

1

Je trouve cette solution sur le web (non inventé par moi), en utilisant SQL plus:

set feed off markup html on spool on 
spool c:\table1.xls 
select * from table1; 
spool off 
set markup html off spool off 
1

Il y a un autre projet ORA_EXCEL (www.oraexcel.com) qui peut produire des documents Excel à partir de la base de données Oracle en utilisant uniquement PL/SQL.

1

De: MSDN. Si vous voulez que votre feuille de calcul pour être portable et ne pas compter sur DSNs système, vous pouvez vous connecter en utilisant une chaîne de connexion comme:

Dim cnn As ADODB.Connection 
Set cnn = New ADODB.Connection 

cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=<PASSWORD>;Persist Security Info=True;User ID=<USER ID>;Data Source=<DATABASE NAME>" 
cnn.Open 

... puis utilisez Moleboy's solution.

0

Votre problème semble similaire à un fil ici dans SO (Writing in ExcelSheet using UTL_FILE package in Oracle.) Et j'ai été capable de trouver une solution simple à ce problème récemment. J'ai utilisé un paquet appelé as_xlsx créé par Anton Scheffer, (Create an Excel-file with PL/SQL) et j'ai fait quelques modifications afin qu'il crée plusieurs feuilles dans un seul classeur Excel en le faisant passer par une boucle. Il prend également en charge certains formatage de base tels que la couleur des cellules, le style de police, la taille de la police, les bordures, etc. C'est très pratique. (Create an Excel File (.xlsx) using PL/SQL).

Espérons que cela aide!

Questions connexes