Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 114413|Atbildi: 15

[Avots] . NPOI lasīšanas un rakstīšanas operācija Excel tabulas spraudnis tīklam

[Kopēt saiti]
Publicēts 21.09.2015 18:45:03 | | |

1. Visu Excel tabulu sauc par darblapu: WorkBook, un tajā ir lapa (darblapa): Lapa; Rinda: Rinda; Šūna.

2. NPOI ir IP C # versija, un NPOI rindu un kolonnu indekss sākas no 0

3. Excel IP lasīšanai ir divi formāti, viens ir HSSF un otrs ir XSSF. Atšķirības starp HSSF un XSSF ir šādas:
HSSF ir POI projekta tīra Java Excel '97 (-2007) faila formāta ieviešana.
XSSF ir IP projekta tīrā Java Excel 2007 OOXML (.xlsx) faila formāta ieviešana.
Tas nozīmē, ka HSSF ir piemērojams versijām pirms 2007. gada, un XSSF ir piemērojams 2007. gadam un jaunākiem.

Tālāk ir sniegts NPOI izmantošanas piemērs Excel lasīšanai un rakstīšanai: ExcelHelper funkcija ir rakstīt datus no DataTable uz Excel vai lasīt datus no Excel uz DataTable.

ExcelHelper klase:

  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. }
Kopēt kodu

NPOI 2.2.0.0.part01.rar (1 MB, Lejupielādes skaits: 13)

NPOI 2.2.0.0.part02.rar (1 MB, Lejupielādes skaits: 11) NPOI 2.2.0.0.part03.rar (1 MB, Lejupielādes skaits: 6) NPOI 2.2.0.0.part04.rar (552.54 KB, Lejupielādes skaits: 1)







Iepriekšējo:[Oriģināls] Unikoda šifrēšanas atšifrēšanas rīks, kas sākas ar &quot;\u&quot;
Nākamo:"Izlaiduma projekta" veidne, kas veltīta datorzinātņu programmatūras absolvēšanai
 Saimnieks| Publicēts 01.11.2018 12:58:33 |
 Saimnieks| Publicēts 14.05.2021 17:27:51 |
Publicēts 17.09.2021 13:58:09 |
Mazie izdedži Publicēts 2021-9-17 12:35
Atkļūdojiet un atrisiniet to pats

Indekss ir ārpus darbības jomas, tas nav nekas cits kā jūsu datu tabulā kopumā ir 10 datu rindas, jūs lasāt 11. rindu vai kopā ir 5 ...

Parauga kods saņems šo kļūdu bez galvenes bool isFirstRowColumn=false, un, ja tas ir ar galveni, tas būs labi
Publicēts 22.09.2015 02:45:27 |
~~~~~~~~~~~~~~~~~~~~~~~~~
Publicēts 02.05.2018 16:08:02 |
Šo ziņu pēdējo reizi rediģēja QWERTYU 2018-5-2 16:52

Izpildes kļūda: nevar iegūt teksta vērtību no skaitliskas šūnas Risinājums:Šūnu formatēšana

   HSSFCell šūna = row.getCell(keyIndex);
   cell.setCellType(HSSFCell.CELL_TYPE_STRING);


Publicēts 29.06.2019 16:03:00 |
Paldies, paldies, liels paldies
Publicēts 12.09.2021 10:12:16 |

Vienkāršu papildinājumu, dzēšanas un izmaiņu ieviešana meklēšanas lapās
Publicēts 17.09.2021 09:32:23 |
Paskaties
Publicēts 17.09.2021 09:49:37 |
Izmestais izņēmums: "System.IndexOutOfRangeException" (System.Data.dll)
Exception: 无法找到列 0。
 Saimnieks| Publicēts 17.09.2021 09:55:07 |
FYXH66 Publicēts 2021-9-17 09:49
Izmestais izņēmums: "System.IndexOutOfRangeException" (System.Data.dll)
Exception: 无法找到列 0。 ...

Indekss ir ārpus darbības jomas

Vēlāk es jums sniegšu jaunu rakstu atsaucei
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com