Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 114413|Répondre: 15

[Source] . Opération de lecture et d’écriture NPOI plug-in Excel pour Net

[Copié le lien]
Publié sur 21/09/2015 18:45:03 | | |

1. L’ensemble du tableau Excel s’appelle une feuille de travail : WorkBook, et il contient une page (feuille de calcul) : Sheet ; Rangée : Rangée ; Cellule.

2. NPOI est la version C# de POI, et l’index des lignes et colonnes de NPOI commence à 0

3. Il existe deux formats pour lire Excel sur les POI, l’un est HSSF et l’autre XSSF. Les différences entre HSSF et XSSF sont les suivantes :
HSSF est l’implémentation Java pure du format Excel '97(-2007) du projet POI.
XSSF est l’implémentation Java pure du format Excel 2007 OOXML (.xlsx) du projet POI.
C’est-à-dire que le HSSF s’applique aux versions antérieures à 2007, et le XSSF s’applique à 2007 et au-delà.

Voici un exemple d’utilisation de NPOI pour lire et écrire Excel : La fonction d’ExcelHelper est d’écrire des données d’une DataTable vers Excel, ou de lire des données d’Excel vers une DataTable.

Cours ExcelHelper :

  1. using NPOI.HSSF.UserModel;
  2. using NPOI.SS.UserModel;
  3. using NPOI.XSSF.UserModel;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Data;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Web;

  10. namespace HouPuStudent.Utility
  11. {
  12.     public class ExcelHelper
  13.     {
  14.         private string fileName = null; //文件名
  15.         private IWorkbook workbook = null;
  16.         private FileStream fs = null;
  17.         private bool disposed;

  18.         public ExcelHelper(string fileName)
  19.         {
  20.             this.fileName = fileName;
  21.             disposed = false;
  22.         }

  23.         /// <summary>
  24.         /// 将DataTable数据导入到excel中
  25.         /// </summary>
  26.         /// <param name="data">要导入的数据</param>
  27.         /// <param name="isColumnWritten">DataTable的列名是否要导入</param>
  28.         /// <param name="sheetName">要导入的excel的sheet的名称</param>
  29.         /// <returns>导入数据行数(包含列名那一行)</returns>
  30.         public int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten)
  31.         {
  32.             int i = 0;
  33.             int j = 0;
  34.             int count = 0;
  35.             ISheet sheet = null;

  36.             fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
  37.             if (fileName.IndexOf(".xlsx") > 0) // 2007版本
  38.                 workbook = new XSSFWorkbook();
  39.             else if (fileName.IndexOf(".xls") > 0) // 2003版本
  40.                 workbook = new HSSFWorkbook();

  41.             try
  42.             {
  43.                 if (workbook != null)
  44.                 {
  45.                     sheet = workbook.CreateSheet(sheetName);
  46.                 }
  47.                 else
  48.                 {
  49.                     return -1;
  50.                 }

  51.                 if (isColumnWritten == true) //写入DataTable的列名
  52.                 {
  53.                     IRow row = sheet.CreateRow(0);
  54.                     for (j = 0; j < data.Columns.Count; ++j)
  55.                     {
  56.                         row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName);
  57.                     }
  58.                     count = 1;
  59.                 }
  60.                 else
  61.                 {
  62.                     count = 0;
  63.                 }

  64.                 for (i = 0; i < data.Rows.Count; ++i)
  65.                 {
  66.                     IRow row = sheet.CreateRow(count);
  67.                     for (j = 0; j < data.Columns.Count; ++j)
  68.                     {
  69.                         row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());
  70.                     }
  71.                     ++count;
  72.                 }
  73.                 workbook.Write(fs); //写入到excel
  74.                 return count;
  75.             }
  76.             catch (Exception ex)
  77.             {
  78.                 Console.WriteLine("Exception: " + ex.Message);
  79.                 return -1;
  80.             }
  81.         }

  82.         /// <summary>
  83.         /// 将excel中的数据导入到DataTable中
  84.         /// </summary>
  85.         /// <param name="sheetName">excel工作薄sheet的名称</param>
  86.         /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>
  87.         /// <returns>返回的DataTable</returns>
  88.         public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn)
  89.         {
  90.             ISheet sheet = null;
  91.             DataTable data = new DataTable();
  92.             int startRow = 0;
  93.             try
  94.             {
  95.                 fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
  96.                 if (fileName.IndexOf(".xlsx") > 0) // 2007版本
  97.                     workbook = new XSSFWorkbook(fs);
  98.                 else if (fileName.IndexOf(".xls") > 0) // 2003版本
  99.                     workbook = new HSSFWorkbook(fs);

  100.                 if (sheetName != null)
  101.                 {
  102.                     sheet = workbook.GetSheet(sheetName);
  103.                     if (sheet == null) //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
  104.                     {
  105.                         sheet = workbook.GetSheetAt(0);
  106.                     }
  107.                 }
  108.                 else
  109.                 {
  110.                     sheet = workbook.GetSheetAt(0);
  111.                 }
  112.                 if (sheet != null)
  113.                 {
  114.                     IRow firstRow = sheet.GetRow(0);
  115.                     int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数

  116.                     if (isFirstRowColumn)
  117.                     {
  118.                         for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
  119.                         {
  120.                             ICell cell = firstRow.GetCell(i);
  121.                             if (cell != null)
  122.                             {
  123.                                 string cellValue = cell.StringCellValue;
  124.                                 if (cellValue != null)
  125.                                 {
  126.                                     DataColumn column = new DataColumn(cellValue);
  127.                                     data.Columns.Add(column);
  128.                                 }
  129.                             }
  130.                         }
  131.                         startRow = sheet.FirstRowNum + 1;
  132.                     }
  133.                     else
  134.                     {
  135.                         startRow = sheet.FirstRowNum;
  136.                     }

  137.                     //最后一列的标号
  138.                     int rowCount = sheet.LastRowNum;
  139.                     for (int i = startRow; i <= rowCount; ++i)
  140.                     {
  141.                         IRow row = sheet.GetRow(i);
  142.                         if (row == null) continue; //没有数据的行默认是null       

  143.                         DataRow dataRow = data.NewRow();
  144.                         for (int j = row.FirstCellNum; j < cellCount; ++j)
  145.                         {
  146.                             if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
  147.                                 dataRow[j] = row.GetCell(j).ToString();
  148.                         }
  149.                         data.Rows.Add(dataRow);
  150.                     }
  151.                 }

  152.                 return data;
  153.             }
  154.             catch (Exception ex)
  155.             {
  156.                 Console.WriteLine("Exception: " + ex.Message);
  157.                 return null;
  158.             }
  159.         }

  160.         public void Dispose()
  161.         {
  162.             Dispose(true);
  163.             GC.SuppressFinalize(this);
  164.         }

  165.         protected virtual void Dispose(bool disposing)
  166.         {
  167.             if (!this.disposed)
  168.             {
  169.                 if (disposing)
  170.                 {
  171.                     if (fs != null)
  172.                         fs.Close();
  173.                 }

  174.                 fs = null;
  175.                 disposed = true;
  176.             }
  177.         }
  178.     }
  179. }
Code de copie

NPOI 2.2.0.0.part01.rar (1 MB, Nombre de téléchargements: 13)

NPOI 2.2.0.0.part02.rar (1 MB, Nombre de téléchargements: 11) NPOI 2.2.0.0.part03.rar (1 MB, Nombre de téléchargements: 6) NPOI 2.2.0.0.part04.rar (552.54 KB, Nombre de téléchargements: 1)







Précédent:[Original] Outil de déchiffrement de chiffrement Unicode commençant par « \u »
Prochain:Un modèle de « projet de fin d’études » dédié aux logiciels d’informatique diplômés
 Propriétaire| Publié sur 01/11/2018 12:58:33 |
 Propriétaire| Publié sur 14/05/2021 17:27:51 |
Publié sur 17/09/2021 13:58:09 |
Petite Publié le 17-09-2021 à 12:35
Débogue et résous toi-même

L’index est hors du champ de contrôle, ce n’est rien de plus que votre table de données contient un total de 10 lignes de données, vous lisez la 11e ligne, ou vous avez un total de 5...

Le code d’exemple obtiendra cette erreur sans le bool de l’en-tête isFirstRowColumn=false, et si c’est avec l’en-tête, tout ira bien
Publié sur 22/09/2015 02:45:27 |
~~~~~~~~~~~~~~~~~~~~~~~~~
Publié sur 02/05/2018 16:08:02 |
Ce post a été modifié pour la dernière fois par QWERTYU le 2018-5-2 à 16:52

Erreur d’exécution : impossible d’obtenir une valeur texte d’une cellule numérique Solution :Formatez les cellules

   HSSFCell cell = row.getCell(keyIndex) ;
   cell.setTypeCellul(HSSFCell.CELL_TYPE_STRING) ;


Publié sur 29/06/2019 16:03:00 |
Merci, merci, merci beaucoup
Publié sur 12/09/2021 10:12:16 |

Implémenter des ajouts, suppressions et modifications simples aux pages de recherche
Publié sur 17/09/2021 09:32:23 |
Regardez
Publié sur 17/09/2021 09:49:37 |
Exception lancée : « System.IndexOutofRangeException » (dans System.Data.dll)
Exception: 无法找到列 0。
 Propriétaire| Publié sur 17/09/2021 09:55:07 |
fyxh66 posté le 17-09-2021 à 09:49
Exception lancée : « System.IndexOutofRangeException » (dans System.Data.dll)
Exception: 无法找到列 0。 ...

L’index est hors du cadre

Plus tard, je vous donnerai un nouvel article pour référence
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com