Question

J'essaie de créer des documents Excel 2007 par programme. Maintenant, il y a deux façons que j'ai trouvées:

Actuellement, j'utilise ExcelPackage, qui présente des inconvénients et des problèmes très graves. Comme je n'ai pas besoin de créer des feuilles Excel trop complexes (la chose la plus "compliquée" est que je dois explicitement définir un type de cellule en numérique ou en texte), je me tourne vers l'option 1, mais je me demande simplement s'il Existe-t-il d'autres méthodes efficaces permettant de générer des feuilles Excel 2007? Bonus Points s'ils peuvent être créés sans avoir à les enregistrer sur le disque dur, c'est-à-dire les générer et les exporter directement dans un flux.

.net 3.0 est la cible ici, pas de bonté 3.5: (

Modifier: Merci jusqu'à présent. Le XML SDK n’est certes que de la version 3.5, mais Russian Roulet ... euh ... COM Interop est aussi quelque chose que je veux éviter autant que possible, d’autant plus que Excel 2007 a un format un peu compliqué mais quand même assez facile à créer. Je jetterai un coup d'œil aux différents liens et astuces postés.

Était-ce utile?

La solution

Vous pouvez essayer d’utiliser le Bureau Open XML SDK . Cela vous permettra de créer des fichiers Excel en mémoire en utilisant un MemoryStream et beaucoup plus facilement que de générer tout le XML à la main.

Comme Brian Kim l’a fait remarquer, la version 2.0 du SDK requiert .NET 3.5 dont vous avez déclaré qu’elle n’était pas disponible. Version 1 du SDK est également disponible qui prend en charge .NET 3.0. Il n’est pas aussi complet, mais vous aidera au moins à gérer les parties XML du document et les relations entre elles.

Autres conseils

Je ne fais que générer un tableau HTML pouvant être ouvert par Excel:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Wnioski</title>
<style type="text/css">
<!--
br { mso-data-placement: same-cell; }
td { mso-number-format: \@; mso-displayed-decimal-separator: "."; }
-->
</style>

<table>
<tr style="height:15.0pt">
<td style="mso-number-format: general">474</td>
<td>474</td>

<tr>
<td>data2</td>
<td>data3</td>

<tr>
<td style="mso-number-format: &quot;yyyy-mm-dd&quot;">2008-10-01</td>
<td style="mso-number-format: standard">0.00</td>

<tr>
<td style="mso-number-format: general">line1<br>line2<br>line3</td>
<td></td>

</table>

Cela fonctionne également comme source de données pour les lettres série dans Word, fonctionne avec OpenOffice calc, etc. Il est extrêmement simple à générer.

J'allais faire un commentaire sur le message de BKimmel, mais apparemment, je n'ai pas encore assez de points SO Cool.

Si Excel est déjà ouvert, vous pouvez obtenir cet ennuyeux "personal.xls est déjà ouvert". message. J'essaie d'abord d'obtenir l'application. Si cela échoue, créez-le:

On Error Resume Next
Set myxlApp  = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
  Err.Clear
  Set myxlApp = CreateObject("Excel.Application")
  If Err.Number <> 0 Then
    ' return False, show message, etc.
  End If
End If

J'ai effectué la plupart des travaux Open XML (xlsx) dans SpreadsheetGear pour .NET . à partir d'un exercice trivial. Je recommande d'utiliser le kit de développement Office Open XML SDK ou une autre bibliothèque tierce telle que SpreadsheetGear ou l'un de nos concurrents (consultez simplement Google "SpreadsheetGear" pour savoir qui sont nos concurrents).

SpreadsheetGear pour .NET semble répondre à vos besoins:

  • Fonctionne avec .NET 2.0, .NET 3.0 et .NET 3.5.
  • Prend en charge l'écriture dans un flux avec IWorkbook.SaveToStream ou l'écriture dans un tableau d'octets avec IWorkbook.SaveToMemory.
  • Prend en charge les classeurs Excel 97-2003 (xls), qui vous seront probablement demandés si vous devez prendre en charge de très nombreux utilisateurs.

Vous pouvez télécharger une évaluation gratuite et entièrement fonctionnelle ici .

Excel est très scriptable via des objets COM. Je ne l'ai pas essayé, mais cela devrait être une solution solide, bien que ni rapide ni légère.

Quoi que vous fassiez, vérifiez si votre solution prend en charge Unicode. J'ai rencontré de graves problèmes d'utilisation des solutions existantes pour l'écriture de fichiers xls (c'est-à-dire des fichiers antérieurs à 2007).

Vous pouvez utiliser les assemblages d'interopérabilité primaires (l'API Office) pour générer par programme des documents Excel. Je ne voudrais pas les utiliser avec une complexité excessive, mais cela ne semble pas être votre exigence.

Cette approche devrait également fonctionner pour générer les documents en mémoire.

Voici quelques ressources:

J'avais l'habitude de générer un marquage de traitement de texte . documents utilisant une bibliothèque de fonctions pour créer le code XML correct pour les tableaux et les paragraphes.

Je viens alors de changer le type MIME pour que l'en-tête de réponse soit un document Word et d'envoyer le XML comme réponse au client. Il s'ouvre dans leur navigateur ou enregistre sous un fichier.

Il ne semble pas exister le même SDK 2003 pour Excel bien qu'il existe Kit de développement logiciel (SDK) Open XML MS

Chaque code-snob vivant déteste vbscript, mais c'est simple et cela fonctionne:

Set myxlapp = CreateObject("Excel.Application")
Set mywb = myxlapp.Workbooks.Add
myxlapp.Visible = true

Mettez cela dans un fichier texte, ajoutez un " vbs " à la fin et presto.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top