2008-12-03 4 views
2

Le scénario: nous avons un système web qui génère automatiquement des fichiers Office 2003 Excel à la volée (en utilisant le format de fichier XML 2003, pas le format binaire). Ces fichiers sont gardés sur le serveur web pour diverses choses.Existe-t-il un moyen de concaténer par programmation les fichiers Excel?

Maintenant, nous sommes dans une situation où le client aimerait vraiment que nous prenions les fichiers xls générés par ce processus et les regroupions en une seule feuille d'un gros fichier. (en grande partie pour qu'ils ne puissent appuyer sur "print" qu'une seule fois.)

Je suppose que le framework .net doit avoir un moyen de le faire (et des choses comme ça) mais je n'arrive pas à trouver ce dont j'ai besoin MSDN.

Pour l'enregistrement: .net 2.0, en utilisant VB.net et ASP.net. Excel peut être installé sur le serveur si nécessaire, mais quelque chose qui ouvre Excel en arrière-plan sur chaque utilisateur Web atteint peut ne pas évoluer aussi bien. ;)

+0

Le format XML est 2007 (mais vous pouvez ouvrir les fichiers XML dans 2003 après avoir utilisé le pack de compatibilité 2007). – TravisO

+0

En fait, 2003 avait son propre format XML. Croyez-moi, comme a été surpris que quiconque d'apprendre cela. –

+0

Ce n'est pas une réponse, mais je suis curieux de savoir pourquoi les fichiers Excel ont été créés en premier lieu? Si c'est juste un rapport que l'utilisateur visualise en ligne ou imprime, pourquoi ne pas utiliser le HTML? – KeyserSoze

Répondre

1

ADO conviendrait peut-être? Voici un exemple de script.

strXLToOpen = "C:\Docs\ltd.xls" 
strXLToImport = "C:\Docs\ltd2.xls" 

Set cn = CreateObject("ADODB.Connection") 
''EDIT I not that MSDASQL is deprecated by Microsoft, so 
''Please see below. 
With cn 
    .Provider = "MSDASQL" 
    .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ 
"DBQ=" & strXLToOpen & "; ReadOnly=False;" 
    .Open 
End With 

strSQL = "INSERT INTO [Sheet2$] (H1, H2) " _ 
& "SELECT H1, H2 FROM [Sheet2$] IN '' " _ 
& "'Excel 8.0;database=" & strXLToImport & "';"  

cn.Execute strSQL 

Informations complémentaires: http://support.microsoft.com/kb/257819/EN-US/

http://support.microsoft.com/kb/278973

Modifier re commentaire.

Est-ce que cela conviendrait? Il est de: http://www.codemaker.co.uk/it/tips/ado_conn.htm#ODBCDriverForExcel

cn.Open "Driver={Microsoft Excel Driver (*.xls)};" & _ 
      "DriverId=790;" & _ 
      "DBQ=" & strXLToOpen & "; ReadOnly=False;" & _ 
      "DefaultDir=c:\somepath" 

Vous pouvez également utiliser des pilotes de Jet avec Excel.

EDIT re Commentaire n ° 2

J'ai testé cette chaîne de connexion avec .Net, et il semble fonctionner:

"Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
"Data Source=C:\Docs\Test.xls;" & _ 
"Mode=ReadWrite;Extended Properties=""Excel 8.0;HDR=No""" 
+0

C'est assez spectaculaire, mais ces chaînes de connexion ne fonctionnent pas sous .net 2.0 ou avec un fichier Excel 2003 xml. Une chance d'une version d'ado.net? –

1

afin que votre utilisateur souhaite ajouter le dernier fichier généré à chaque fois? ou tout simplement coller » les ensemble quand ils font une demande

EDIT:?

quel type de données est dans le fichier excel peut-il être transformé temporairement à un

format plus simple, comme csv même? Si vous ne pouvez pas, vous pouvez créer un nouveau fichier et comme vous bouclez chaque ligne dans chaque fichier, vous pouvez l'écrire dans le nouveau fichier. Le problème ici est que si vous avez des fonctions dans les cellules, celles-ci seraient perdues. seulement pour copier les données

À part ça, vous devrez utiliser Excel Interop et bien que je connaisse sa peine, et ce n'est vraiment pas MS pris en charge pour l'automatisation, nous avons réussi à créer un système d'automatisation très fiable en tant que service web.

+0

Essentiellement, lorsqu'un autre utilisateur appuie sur un autre bouton, le processus prend tous les fichiers xls dans le répertoire et les concatène dans un nouveau fichier. –

3

Je ne sais pas ce que sont les fichiers Excel, mais serait-il possible de commencer au moins avec un format plus simple qu'Excel peut lire? IE, commencez avec un fichier CSV, joignez-les ensemble, puis convertissez-le au format Excel.

Il me semble qu'il serait plus facile de convertir au format Excel le plus tard possible dans le processus.

+0

Parfois, vous ne pouvez pas voir la forêt, quand tout ce que vous voyez est des arbres. –

1

Vous êtes sûr que le framework .Net n'a pas ce que vous cherchez et vous devrez le créer manuellement. Vous pouvez le fait via l'Interop Excel:

Microsoft.Office.Interop.Excel de MSDN

Edit: Juste pour que vous avez quelque chose à espérer, il peut être une douleur à travailler avec! : X

1

1) Ouvrez chaque fichier XML.
2) Prenez le XML de feuille de calcul pour chaque feuille de travail.
3) Insérer tout le fichier XML de la feuille de calcul dans un nouveau document Excel 2003 «wrapper».
4) Remettre le document de la requête Web.

Assurez-vous que les feuilles de calcul ont des noms uniques. J'éviterais le format XML 2007 puisque vous travaillez avec le format 2003 le plus facile à manipuler.

Questions connexes