Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 114413|Atsakyti: 15

[Šaltinis] . NPOI skaitymo ir rašymo operacija "Excel" lentelės papildinys, skirtas tinklui

[Kopijuoti nuorodą]
Paskelbta 2015-09-21 18:45:03 | | |

1. Visa "Excel" lentelė vadinama darbalapiu: Darbo knyga, ir joje yra puslapis (darbalapis): Lapas; eilutė: eilutė; Ląstelė.

2. NPOI yra C# POI versija, o NPOI eilučių ir stulpelių indeksas prasideda nuo 0

3. Yra du "Excel" lankytinų vietų skaitymo formatai: vienas yra HSSF, o kitas - XSSF. HSSF ir XSSF skirtumai yra šie:
HSSF yra POI projekto grynas Java įgyvendinimas Excel '97 (-2007) failo formatu.
XSSF yra POI projekto grynas Java įgyvendinimas Excel 2007 OOXML (.xlsx) failo formatu.
Tai reiškia, kad HSSF taikomas versijoms iki 2007 m., o XSSF – 2007 m. ir naujesnėms versijoms.

Toliau pateikiamas NPOI naudojimo "Excel" skaitymui ir rašymui pavyzdys: "ExcelHelper" funkcija yra rašyti duomenis iš "DataTable" į "Excel" arba skaityti duomenis iš "Excel" į "DataTable".

ExcelHelper klasė:

  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. }
Kopijuoti kodą

NPOI 2.2.0.0.part01.rar (1 MB, Atsisiuntimų skaičius: 13)

NPOI 2.2.0.0.part02.rar (1 MB, Atsisiuntimų skaičius: 11) NPOI 2.2.0.0.part03.rar (1 MB, Atsisiuntimų skaičius: 6) NPOI 2.2.0.0.part04.rar (552.54 KB, Atsisiuntimų skaičius: 1)







Ankstesnis:[Originalas] Unicode šifravimo iššifravimo įrankis, prasidedantis &quot;\u&quot;
Kitą:"Baigimo projekto" šablonas, skirtas informatikos programinei įrangai baigti
 Savininkas| Paskelbta 2018-11-01 12:58:33 |
 Savininkas| Paskelbta 2021-05-14 17:27:51 |
Paskelbta 2021-09-17 13:58:09 |
Šlakas Publikuota: 2021-9-17 12:35
Derinkite ir išspręskite patys

Indeksas nepatenka į taikymo sritį, tai ne kas kita, kaip jūsų duomenų lentelėje iš viso yra 10 duomenų eilučių, jūs perskaitėte 11-ąją eilutę arba iš viso turite 5 ...

Pavyzdinis kodas gaus šią klaidą be antraštės bool isFirstRowColumn=false, o jei jis yra su antrašte, viskas bus gerai
Paskelbta 2015-09-22 02:45:27 |
~~~~~~~~~~~~~~~~~~~~~~~~~
Paskelbta 2018-05-02 16:08:02 |
Šį pranešimą paskutinį kartą redagavo QWERTYU 2018-5-2 16:52

Vykdymo klaida: neįmanoma gauti teksto reikšmės iš skaitinio langelio Sprendimas:Langelių formatavimas

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


Paskelbta 2019-06-29 16:03:00 |
Ačiū, ačiū, labai ačiū
Paskelbta 2021-09-12 10:12:16 |

Paprastų papildymų, ištrynimų ir pakeitimų įgyvendinimas paieškos puslapiuose
Paskelbta 2021-09-17 09:32:23 |
Pažiūrėk
Paskelbta 2021-09-17 09:49:37 |
Pateikta išimtis: "System.IndexOutOfRangeException" (System.Data.dll)
Exception: 无法找到列 0。
 Savininkas| Paskelbta 2021-09-17 09:55:07 |
FYXH66 Paskelbta 2021-9-17 09:49
Pateikta išimtis: "System.IndexOutOfRangeException" (System.Data.dll)
Exception: 无法找到列 0。 ...

Indeksas nepatenka į taikymo sritį

Vėliau duosiu jums naują straipsnį nuorodai
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com