Domanda

Sto cercando di creare documenti Excel 2007 a livello di codice. Ora, ho trovato due modi:

Attualmente uso ExcelPackage, che presenta alcuni inconvenienti e problemi davvero gravi. Dato che non ho bisogno di creare fogli Excel eccessivamente complessi (la cosa più "complicata" è che ho esplicitamente bisogno di impostare un tipo di cella su numerico o testo), sto guardando verso l'opzione 1 successiva, ma mi chiedo solo se ci ci sono altri modi validi e supportati per generare fogli Excel 2007? Punti bonus se possono essere creati senza doverli salvare sul disco rigido, ovvero generarli e inviarli direttamente in un flusso.

.net 3.0 è l'obiettivo qui, nessuna bontà 3.5 :(

Modifica: grazie finora. L'SDK XML è effettivamente solo 3.5, ma il roulet russo ... erm ... COM Interop è anche qualcosa che voglio evitare ogni volta che è possibile, soprattutto perché Excel 2007 ha un formato documento piuttosto complicato ma ancora piuttosto semplice. Vedrò i vari link e suggerimenti pubblicati.

È stato utile?

Soluzione

Potresti provare a utilizzare Office Apri XML SDK . Ciò ti consentirà di creare file Excel in memoria usando dire un MemoryStream e molto più facilmente rispetto alla generazione manuale di tutto l'XML.

Come ha sottolineato Brian Kim, la versione 2.0 dell'SDK richiede .NET 3.5, che hai dichiarato non disponibile. Versione 1 dell'SDK è anche disponibile che supporta .NET 3.0. Non è completo, ma almeno ti aiuterà a gestire le parti XML del documento e le relazioni tra di loro.

Altri suggerimenti

Sto solo generando una tabella HTML, che può essere aperta da 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>

Funziona bene anche come fonte di dati per lettere seriali in Word, funziona con OpenOffice calc ecc. Ed è estremamente semplice da generare.

Stavo per commentare il post di BKimmel, ma a quanto pare non ho ancora abbastanza punti così interessanti.

Se Excel è già aperto, puoi ottenere che il fastidioso " personal.xls è già aperto " Messaggio. Provo prima a ottenere l'app. Se fallisce, crealo:

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

Ho svolto la maggior parte del lavoro Open XML (xlsx) in SpreadsheetGear for .NET ed è lontano da un esercizio banale. Ti consiglio di utilizzare Office Open XML SDK o un'altra libreria di terze parti come SpreadsheetGear o uno dei nostri concorrenti (solo Google "SpreadsheetGear" per vedere chi sono i nostri concorrenti).

SpreadsheetGear per .NET sembra soddisfare le tue esigenze:

  • Funziona con .NET 2.0, .NET 3.0 e .NET 3.5.
  • Supporta la scrittura su un flusso con IWorkbook.SaveToStream o la scrittura su un array di byte con IWorkbook.SaveToMemory.
  • Supporta le cartelle di lavoro di Excel 97-2003 (xls) che è probabilmente la prossima cosa che ti verrà richiesta se devi supportare molti utenti.

Puoi scaricare una valutazione gratuita e completamente funzionale qui .

Excel è molto gestibile tramite script tramite oggetti COM. Non l'ho provato, ma questa dovrebbe essere una soluzione solida, anche se né veloce né leggera.

Qualunque cosa tu faccia, controlla se la tua soluzione supporta Unicode. Ho riscontrato alcuni seri problemi con le soluzioni esistenti per la scrittura di file xls (ovvero file pre 2007).

È possibile utilizzare gli Assiemi di interoperabilità primari (API di Office) per generare a livello di codice documenti Excel: non vorrei fare nulla di eccessivamente complesso utilizzandoli, ma non sembra che questo sia il tuo requisito.

Questo approccio dovrebbe funzionare anche per generare i documenti in memoria.

Ecco alcune risorse:

Generavo Markprocessing Worda documenti che utilizzano una libreria di funzioni per la creazione dell'XML corretto per tabelle e paragrafi.

Ho quindi appena cambiato il tipo MIME per l'intestazione Response in un documento word e ho inviato l'XML come risposta al client. Si apre nel loro browser o salva come file.

Sembra che non ci sia lo stesso SDK del 2003 per Excel sebbene ci sia MS Open XML SDK

Ogni codice-snob vivo odia vbscript, ma è semplice e funziona:

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

Mettilo in un file di testo, aggiungi un " .vbs " alla fine e presto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top