without c# create Crea file Excel (.XLS e .XLSX) da C #




15 Answers

Se sei soddisfatto del formato xlsx, prova il mio progetto GitHub codeplex . EPPlus . Iniziato con l'origine da ExcelPackage, ma oggi è una riscrittura totale. Supporta gamme, stile cellulare, grafici, forme, immagini, nomi, autofiltri e molte altre cose.

c# create excel file

Come posso creare un foglio di calcolo Excel con C # senza che Excel debba essere installato sulla macchina su cui è in esecuzione il codice?







La soluzione commerciale, SpreadsheetGear per .NET, lo farà.

Puoi vedere esempi di ASP.NET (C # e VB) dal vivo here e scaricare here una versione di valutazione.

Disclaimer: Possiedo SpreadsheetGear LLC




Un'opzione estremamente leggera potrebbe essere l'uso di tabelle HTML. Crea semplicemente tag head, body e table in un file e salvalo come file con estensione .xls. Esistono attributi specifici di Microsoft che è possibile utilizzare per definire l'output, incluse le formule.

Mi rendo conto che potresti non doverlo codificare in un'applicazione web, ma qui c'è un example della composizione di un file Excel tramite una tabella HTML. Questa tecnica potrebbe essere utilizzata se si stesse codificando un'app per console, un'applicazione desktop o un servizio.




In realtà potresti voler controllare le classi di interoperabilità . Non dici OLE (che non è questo), ma le classi di interoperabilità sono molto facili da usare.

Potresti rimanere colpito se non li hai provati.

Si prega di essere avvisati della stance di Microsoft su questo:

Microsoft al momento non consiglia, e non supporta, l'automazione delle applicazioni Microsoft Office da qualsiasi applicazione o componente client non interattivo non interattivo (inclusi ASP, ASP.NET, DCOM e NT Services), poiché Office potrebbe presentare un comportamento instabile e / o deadlock quando Office viene eseguito in questo ambiente.




Ecco una libreria C # completamente gratuita, che consente di esportare da un DataSet , DataTable o List<> in un vero file .xlsx di Excel 2007, utilizzando le librerie OpenXML:

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

Il codice sorgente completo è fornito - gratuitamente - insieme con le istruzioni e un'applicazione demo.

Dopo aver aggiunto questa classe alla tua applicazione, puoi esportare il tuo DataSet in Excel con una sola riga di codice:

CreateExcelFile.CreateExcelDocument(myDataSet, "C:\\Sample.xlsx");

Non diventa molto più semplice di così ...

E non richiede nemmeno che Excel sia presente sul tuo server.




Syncfusion Essential XlsIO può farlo. Non ha dipendenza da Microsoft Office e ha anche un supporto specifico per piattaforme diverse.

Esempio di codice:

//Creates a new instance for ExcelEngine.
ExcelEngine excelEngine = new ExcelEngine();
//Loads or open an existing workbook through Open method of IWorkbooks
IWorkbook workbook = excelEngine.Excel.Workbooks.Open(fileName);
//To-Do some manipulation|
//To-Do some manipulation
//Set the version of the workbook.
workbook.Version = ExcelVersion.Excel2013;
//Save the workbook in file system as xlsx format
workbook.SaveAs(outputFileName);

L'intera suite di controlli è disponibile gratuitamente tramite il programma di licenza della comunità , se si qualifica (meno di 1 milione di dollari in entrate). Nota: lavoro per Syncfusion.




Bene,

puoi anche utilizzare una libreria di terze parti come Aspose .

Questa libreria ha il vantaggio che non richiede l'installazione di Excel sulla tua macchina, che sarebbe l'ideale nel tuo caso.




Voglio solo aggiungere un altro riferimento a una soluzione di terze parti che affronta direttamente il tuo problema: http://www.officewriter.com

(Disclaimer: Lavoro per SoftArtisans, la società che produce OfficeWriter)




Le varie librerie XML di Office 2003 disponibili funzionano abbastanza bene per i file Excel più piccoli. Tuttavia, trovo che la dimensione di una grande cartella di lavoro salvata nel formato XML sia un problema. Ad esempio, una cartella di lavoro con cui lavoro sarebbe di 40 MB nel nuovo formato XLSX (e sicuramente più compatto) diventa un file XML 360 MB.

Per quanto riguarda la mia ricerca, ci sono due pacchetti commerciali che consentono l'output nei vecchi formati di file binari. Loro sono:

Né sono economici (rispettivamente 500USD e 800USD). ma entrambi funzionano indipendentemente da Excel stesso.

Quello di cui sarei curioso è il modulo di output di Excel per OpenOffice.org. Mi chiedo se possano essere portati da Java a .Net.




Ecco un modo per farlo con LINQ to XML, completo di codice di esempio:

Importa ed esporta rapidamente dati Excel con LINQ in XML

È un po 'complesso, dal momento che devi importare i namespace e così via, ma ti permette di evitare dipendenze esterne.

(Inoltre, naturalmente, è VB .NET, non C #, ma puoi sempre isolare le cose di VB .NET nel proprio progetto per usare XML Literals e fare tutto il resto in C #.)




public class GridViewExportUtil
{
    public static void Export(string fileName, GridView gv)
    {
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader(
            "content-disposition", string.Format("attachment; filename={0}", fileName));
        HttpContext.Current.Response.ContentType = "application/ms-excel";

        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                //  Create a form to contain the grid
                Table table = new Table();

                //  add the header row to the table
                if (gv.HeaderRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                    table.Rows.Add(gv.HeaderRow);
                }

                //  add each of the data rows to the table
                foreach (GridViewRow row in gv.Rows)
                {
                    GridViewExportUtil.PrepareControlForExport(row);
                    table.Rows.Add(row);
                }

                //  add the footer row to the table
                if (gv.FooterRow != null)
                {
                    GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
                    table.Rows.Add(gv.FooterRow);
                }

                //  render the table into the htmlwriter
                table.RenderControl(htw);

                //  render the htmlwriter into the response
                HttpContext.Current.Response.Write(sw.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }

    /// <summary>
    /// Replace any of the contained controls with literals
    /// </summary>
    /// <param name="control"></param>
    private static void PrepareControlForExport(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
            Control current = control.Controls[i];
            if (current is LinkButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
            }
            else if (current is ImageButton)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
            }
            else if (current is HyperLink)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
            }
            else if (current is DropDownList)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
            }
            else if (current is CheckBox)
            {
                control.Controls.Remove(current);
                control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
            }

            if (current.HasControls())
            {
                GridViewExportUtil.PrepareControlForExport(current);
            }
        }
    }
}

Ciao questa soluzione è quella di esportare la tua vista griglia sul tuo file Excel che potrebbe aiutarti




Ho appena usato FlexCel.NET e l' FlexCel.NET trovata una libreria eccellente! Non lo dico su troppi prodotti software. Inutile dare l'intero campo di vendita qui, puoi leggere tutte le funzionalità sul loro sito web.

È un prodotto commerciale, ma ottieni la fonte completa se lo acquisti. Quindi suppongo che potresti compilarlo nel tuo assieme se lo volessi davvero. Altrimenti è solo un assembly in più per xcopy - nessuna configurazione o installazione o qualcosa del genere.

Non penso che troverai alcun modo per farlo senza librerie di terze parti, dato che .NET framework, ovviamente, non ha il supporto integrato per esso e OLE Automation è solo un intero mondo di dolore.




Il modo più semplice e veloce per creare un file Excel da C # è utilizzare lo strumento di produttività Open XML. Open XML Productivity Tool viene fornito con l'installazione Open XML SDK. Lo strumento invertire ingegnerizza qualsiasi file di Excel nel codice C #. Il codice C # può quindi essere utilizzato per rigenerare quel file.

Una panoramica del processo coinvolto è:

  1. Installa Open XML SDK con lo strumento.
  2. Crea un file Excel utilizzando l'ultimo client Excel con l'aspetto desiderato. DesiredLook.xlsx .
  3. Con lo strumento apri DesiredLook.xlsx e fai clic sul pulsante Rifletti codice nella parte superiore.
  4. Il codice C # per il tuo file verrà generato nel riquadro destro dello strumento. Aggiungi questo alla tua soluzione C # e genera file con l'aspetto desiderato.

Come bonus, questo metodo funziona per qualsiasi file Word e PowerPoint. Come sviluppatore C #, apporterai le modifiche al codice in base alle tue esigenze.

Ho sviluppato una semplice app WPF su github che verrà eseguita su Windows per questo scopo. Esiste una classe segnaposto chiamata GeneratedClass cui è possibile incollare il codice generato. Se torni indietro di una versione del file, genererà un file excel come questo:




Hai mai provato lo sylk?

Generavamo gli excelsheet in classico asp come sylk e ora stiamo cercando anche un excelgenerater.

I vantaggi per sylk sono, è possibile formattare le celle.




Related