Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 114413|Svar: 15

[Kilde] . NPOI læse- og skriveoperation Excel-tabel plug-in til Net

[Kopier link]
Opslået på 21/09/2015 18.45.03 | | |

1. Hele Excel-tabellen kaldes et regneark: Arbejdsbog, og det indeholder en side (regneark): Ark; Række: Række; Celle.

2. NPOI er C#-versionen af POI, og indekset for NPOI's rækker og kolonner starter fra 0

3. Der findes to formater til POI-læsning af Excel, det ene er HSSF og det andet er XSSF. Forskellene mellem HSSF og XSSF er som følger:
HSSF er POI-projektets rene Java-implementering af Excel '97(-2007) filformatet.
XSSF er POI-projektets rene Java-implementering af Excel 2007 OOXML (.xlsx) filformatet.
Det vil sige, HSSF gælder for versioner før 2007, og XSSF gælder for 2007 og derover.

Følgende er et eksempel på brug af NPOI til at læse og skrive Excel: ExcelHelpers funktion er at skrive data fra en DataTable til Excel eller læse data fra Excel til en DataTable.

ExcelHelper-kursus:

  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. }
Kopier kode

NPOI 2.2.0.0.part01.rar (1 MB, Antal downloads: 13)

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







Tidligere:[Original] Unicode-krypteringsdekrypteringsværktøj, der starter med &quot;\u&quot;
Næste:En skabelon til "afgangsprojekt" dedikeret til at færdiggøre datalogisoftware
 Udlejer| Opslået på 01/11/2018 12.58.33 |
 Udlejer| Opslået på 14/05/2021 17.27.51 |
Opslået på 17/09/2021 13.58.09 |
Lille slaget Opslået den 2021-9-17 12:35
Debug og løs det selv

Indekset er uden for omfanget, det er ikke andet end at din datatabel har i alt 10 rækker data, du læser den 11. række, eller du har i alt 5 ...

Eksempelkoden vil få denne fejl uden headeren bool isFirstRowColumn=false, og hvis det er med headeren, er det fint
Opslået på 22/09/2015 02.45.27 |
~~~~~~~~~~~~~~~~~~~~~~~~~
Opslået på 02/05/2018 16.08.02 |
Dette indlæg blev sidst redigeret af QWERTYU den 2018-5-2 kl. 16:52

Kør fejl: Kan ikke få en tekstværdi fra en numerisk celle Løsning:Formater cellerne

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


Opslået på 29/06/2019 16.03.00 |
Tak, tak, tusind tak
Opslået på 12/09/2021 10.12.16 |

Implementer simple tilføjelser, sletninger og ændringer til søgesider
Opslået på 17/09/2021 09.32.23 |
Tag et kig
Opslået på 17/09/2021 09.49.37 |
Undtagelse kastet: "System.IndexOutOfRangeException" (i System.Data.dll)
Exception: 无法找到列 0。
 Udlejer| Opslået på 17/09/2021 09.55.07 |
fyxh66 postet den 17-9-2021 09:49
Undtagelse kastet: "System.IndexOutOfRangeException" (i System.Data.dll)
Exception: 无法找到列 0。 ...

Indekset er uden for omfanget

Senere giver jeg dig en ny artikel til reference
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com