Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 114413|Jawab: 15

[Sumber] . Operasi baca dan tulis NPOI Plug-in tabel Excel untuk Net

[Salin tautan]
Diposting pada 21/09/2015 18.45.03 | | |

1. Seluruh tabel Excel disebut lembar kerja: Buku Kerja, dan berisi halaman (lembar kerja): Lembar; Baris: Baris; Sel.

2. NPOI adalah POI versi C#, dan indeks baris dan kolom NPOI dimulai dari 0

3. Ada dua format untuk membaca POI Excel, satu adalah HSSF dan yang lainnya adalah XSSF. Perbedaan antara HSSF dan XSSF adalah sebagai berikut:
HSSF adalah implementasi Java murni dari format file Excel '97 (-2007) dari Proyek POI.
XSSF adalah implementasi Java murni dari format file Excel 2007 OOXML (.xlsx) Proyek POI.
Artinya, HSSF berlaku untuk versi sebelum 2007, dan XSSF berlaku untuk 2007 dan di atasnya.

Berikut ini adalah contoh penggunaan NPOI untuk membaca dan menulis Excel: Fungsi ExcelHelper adalah menulis data dari DataTable ke Excel, atau membaca data dari Excel ke DataTable.

Kelas 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. }
Salin kode

NPOI 2.2.0.0.part01.rar (1 MB, Jumlah unduhan: 13)

NPOI 2.2.0.0.part02.rar (1 MB, Jumlah unduhan: 11) NPOI 2.2.0.0.part03.rar (1 MB, Jumlah unduhan: 6) NPOI 2.2.0.0.part04.rar (552.54 KB, Jumlah unduhan: 1)







Mantan:[Asli] Alat dekripsi enkripsi Unicode yang dimulai dengan &quot;\u&quot;
Depan:Templat "proyek kelulusan" yang didedikasikan untuk meluluskan perangkat lunak ilmu komputer
 Tuan tanah| Diposting pada 01/11/2018 12.58.33 |
 Tuan tanah| Diposting pada 14/05/2021 17.27.51 |
Diposting pada 17/09/2021 13.58.09 |
Terak kecil Dipaparkan pada 2021-9-17 12:35
Debug dan selesaikan sendiri

Indeksnya berada di luar cakupan, tidak lebih dari tabel data Anda memiliki total 10 baris data, Anda membaca baris ke-11, atau Anda memiliki total 5 ...

Kode sampel akan mendapatkan kesalahan ini tanpa header bool isFirstRowColumn=false, dan jika dengan header, itu akan baik-baik saja
Diposting pada 22/09/2015 02.45.27 |
~~~~~~~~~~~~~~~~~~~~~~~~~
Diposting pada 02/05/2018 16.08.02 |
Posting ini terakhir diedit oleh QWERTYU pada 2018-5-2 16:52

Kesalahan jalankan: Tidak dapat mendapatkan nilai teks dari sel numerik Solusi:Format sel

   Sel HSSFCell = row.getCell(keyIndex);
   cell.setCellType(HSSFCell.CELL_TYPE_STRING);


Diposting pada 29/06/2019 16.03.00 |
Terima kasih, terima kasih, terima kasih banyak
Diposting pada 12/09/2021 10.12.16 |

Menerapkan penambahan, penghapusan, dan perubahan sederhana pada halaman pencarian
Diposting pada 17/09/2021 09.32.23 |
Lihatlah
Diposting pada 17/09/2021 09.49.37 |
Pengecualian yang dilemparkan: "System.IndexOutOfRangeException" (dalam System.Data.dll)
Exception: 无法找到列 0。
 Tuan tanah| Diposting pada 17/09/2021 09.55.07 |
fyxh66 dipaparkan pada 2021-9-17 09:49
Pengecualian yang dilemparkan: "System.IndexOutOfRangeException" (dalam System.Data.dll)
Exception: 无法找到列 0。 ...

Indeks berada di luar cakupan

Nanti, saya akan memberi Anda artikel baru untuk referensi
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com