web-dev-qa-db-fra.com

Bibliothèque Excel .NET pouvant lire / écrire des fichiers .xls

Je recherche une bibliothèque Excel qui lit/écrit des fichiers .xls (pas .xlsx).

J'utilise excellibrary mais c'est très bogué et je je n'arrive pas à ouvrir les fichiers que je crée . Le problème est connu depuis près d'un an et n'a pas encore été résolu.

J'ai vu dans un autre fil quelqu'un a suggéré EPPlus , mais cela ne fonctionne qu'avec le format .xlsx 2007/2010.

J'ai utilisé Koogra dans le passé et j'en ai été très satisfait, mais je crois qu'il ne peut que lire ... pas écrire.

Si vous connaissez une bibliothèque, faites-moi savoir comment elle s'appelle.

Edit: je suis assez heureux de créer mon fichier Excel avec Microsoft.Office.Interop.Excel intégré si nécessaire, mais ma machine a Office 2007 et les machines cibles ont seulement Office 2003. J'ai remarqué que j'ai 2 versions de fichier pour cette bibliothèque: 12 et 14. J'ai vérifié la version Excel sur les machines cibles et c'est 11.8169.8172 - Je suppose que l'interopérabilité Excel intégrée ne fonctionnera pas sur la cible?

42
Ozzah

Je recommanderais NPOI . NPOI est [~ # ~] gratuit [~ # ~] et fonctionne exclusivement avec les fichiers .XLS. Cela m'a beaucoup aidé.

Détail: vous n'avez pas besoin d'avoir Microsoft Office installé sur votre machine pour travailler avec les fichiers .XLS si vous utilisez NPOI.

Consultez ces articles de blog:

Création de feuilles de calcul Excel .XLS et .XLSX en C #

NPOI avec tableau Excel et graphique dynamique

[MISE À JOUR]

NPOI 2.0 a ajouté la prise en charge de XLSX et DOCX.

Vous pouvez en savoir plus à ce sujet ici:

Série de publications NPOI 2.0 prévue

52

Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser la connexion Excel ODBC pour lire et écrire dans Excel? Par exemple, j'ai utilisé le code suivant pour lire un fichier Excel ligne par ligne comme une base de données:

private DataTable LoadExcelData(string fileName)
{
  string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\";";

  OleDbConnection con = new OleDbConnection(Connection);

  OleDbCommand command = new OleDbCommand();

  DataTable dt = new DataTable(); OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$] WHERE LastName <> '' ORDER BY LastName, FirstName", con);

  myCommand.Fill(dt);

  Console.WriteLine(dt.Rows.Count);

  return dt;
}

Vous pouvez écrire dans la "base de données" Excel de la même manière. Comme vous pouvez le voir, vous pouvez sélectionner le numéro de version à utiliser afin de pouvoir rétrograder les versions d'Excel pour la machine avec Excel 2003. En fait, il en va de même pour l'utilisation d'Interop. Vous pouvez utiliser la version inférieure et cela devrait fonctionner avec Excel 2003 même si vous n'avez que la version supérieure sur votre PC de développement.

9
IAmTimCorey

Vous pouvez envisager un outil tiers qui a appelé composant Excel Jetcell .NET pour les fichiers Excel en lecture/écriture:

Échantillon C #

// Create New Excel Workbook
ExcelWorkbook Wbook = new ExcelWorkbook();
ExcelCellCollection Cells = Wbook.Worksheets.Add("Sheet1").Cells;

Cells["A1"].Value = "Excel writer example (C#)";
Cells["A1"].Style.Font.Bold = true;
Cells["B1"].Value = "=550 + 5";

// Write Excel XLS file
Wbook.WriteXLS("Excel_net.xls");

Exemple VB.NET

' Create New Excel Workbook
Dim Wbook As ExcelWorkbook = New ExcelWorkbook()
Dim Cells As ExcelCellCollection = Wbook.Worksheets.Add("Sheet1").Cells

Cells("A1").Value = "Excel writer example (C#)"
Cells("A1").Style.Font.Bold = True
Cells("B1").Value = "=550 + 5"

' Write Excel XLS file
Wbook.WriteXLS("Excel_net.xls")
0
Bonnie Cornell