乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      NPOI讀取Excel表格類(lèi)

       昵稱10504424 2013-11-12

      NPOI讀取Excel表格類(lèi)

       public class NPOIHelper
          {
              private HSSFWorkbook workbook;
              public static IWorkbook LoadFromFile(string filepath)
              {
                  using (FileStream fi = new FileStream(filepath, FileMode.Open, FileAccess.Read))
                  {
                      return new HSSFWorkbook(fi);
                  }
              }


              public static ISheet CreateSheet(string sheetname, IWorkbook workbook)
              {
                  return workbook.CreateSheet(sheetname);
              }

              public ISheet WriteToTemplate<T>(IList<T> datalist, string sheetname, int fieldstartrowindex, int fieldstartcolindex, int datastartrowindex)           
              {
                  return null;
              }

              public NPOIHelper(string filetemplatepath)
              {
                  workbook = (HSSFWorkbook)LoadFromFile(filetemplatepath);
             
              }

              /// <summary>
              /// 將List對(duì)象轉(zhuǎn)為SHEET
              /// </summary>
              /// <typeparam name="T"></typeparam>
              /// <param name="sheetname"></param>
              /// <param name="data"></param>      
              /// <param name="titlerowindex">表頭列</param>
              /// <param name="datarowindex">表數(shù)據(jù)列</param>
              /// <returns></returns>
              public int ConvertTOSheet<T>(string sheetname, IList<T> data,  int titlerowindex, int datarowindex)
                 where T : new()
              {
                  ISheet sheet = workbook.GetSheet(sheetname);
                
                  IRow titlerow = sheet.GetRow(titlerowindex);
                  int rowstartindex = titlerow.FirstCellNum;
                  int rowlastindex = titlerow.LastCellNum;

                  IDictionary<int, string> fieldindexdic = new Dictionary<int, string>();
                  for (int i = rowstartindex; i <= rowlastindex; i++)
                  {
                      ICell cell = titlerow.GetCell(i);
                      if (cell != null)
                      {
                          string fieldstr = cell.ToString();
                          if (!string.IsNullOrEmpty(fieldstr))
                          {
                              fieldindexdic.Add(cell.ColumnIndex, fieldstr.ToUpper());
                          }
                      }
                  }

                  IEnumerable<string> fieldtitle = fieldindexdic.Select(x => x.Value).Distinct();

                  IDictionary<string, PropertyInfo> pifdic = GetPropertyInfoDic<T>(fieldtitle);
                  for (int i = 0; i < data.Count; i++)
                  {
                      IRow datarow = sheet.CreateRow(datarowindex + i);
                      foreach (var titlekv in fieldindexdic)
                      {
                          object dataobject = pifdic[titlekv.Value].GetValue(data[i], null);
                          if (dataobject != null)
                          {
                              ICell datacell = datarow.CreateCell(titlekv.Key);
                              datacell.SetCellValue(dataobject.ToString());
                          }
                      }
                  }
                  return workbook.GetSheetIndex(sheet);
              }

              public IDictionary<string, PropertyInfo> GetPropertyInfoDic<T>(IEnumerable<string> namelist)
                  where T : new()
              {
                  IDictionary<string, PropertyInfo> pifdic = new Dictionary<string, PropertyInfo>();
                  PropertyInfo[] pifs = typeof(T).GetProperties();

                  IEnumerable<PropertyInfo> filedpifs = pifs.Where(x => namelist.Contains(x.Name.ToUpper()));
                  foreach (var kv in filedpifs)
                  {
                      pifdic.Add(kv.Name.ToUpper(), kv);
                  }
                  return pifdic;
              }
              public void DeleteSheet(string sheetname)
              { 
                   int sheetindex =  workbook.GetSheetIndex(sheetname);
                   workbook.RemoveSheetAt(sheetindex);          
              }
              public void Write(Stream sm)
              {
                  workbook.Write(sm);       
              }
              public void DeleteRow(string sheetname, int rowindex)
              {
                  ISheet sheet = workbook.GetSheet(sheetname);
                  IRow row = sheet.GetRow(rowindex);
                  sheet.RemoveRow(row);       
              }

              #region add by pcitdbt 2013/11/11

              #region 將DataTable的數(shù)據(jù)讀取成MemoryStream
              public static MemoryStream RenderToExcel(DataTable dt)
              {
                  MemoryStream ms = new MemoryStream();
                  using (dt)
                  {
                      //創(chuàng)建Workbook
                      HSSFWorkbook book = new HSSFWorkbook();
                      ISheet sheet = book.CreateSheet(dt.TableName);
                      //創(chuàng)建一個(gè)日期類(lèi)型的格式
                      ICellStyle dataStyle = book.CreateCellStyle();
                      IDataFormat dataFormat = book.CreateDataFormat();
                      dataStyle.DataFormat = dataFormat.GetFormat("yyyy-mm-dd");
                      //創(chuàng)建表頭
                      IRow row = sheet.CreateRow(0);
                      foreach (DataColumn col in dt.Columns)
                      {
                          //給表頭添加字段名字
                          row.CreateCell(col.Ordinal).SetCellValue(col.Caption);//Caption沒(méi)有值則獲取ColumnName
                          //設(shè)置列寬
                          sheet.SetColumnWidth(col.Ordinal, 30 * 110);
                      }
                      //創(chuàng)建數(shù)據(jù)行并添加值
                      int rowIndex = 1;//標(biāo)記數(shù)據(jù)行的位置
                      foreach (DataRow dr in dt.Rows)
                      {
                          IRow dataRow = sheet.CreateRow(rowIndex);

                          //通過(guò)列來(lái)獲取值
                          foreach (DataColumn column in dt.Columns)
                          {
                              //判斷是否是DataTime類(lèi)型
                              ICell newCell = dataRow.CreateCell(column.Ordinal);
                              string drValue = dr[column].ToString();
                              switch (column.DataType.ToString())
                              {
                                  case "System.String"://字符串類(lèi)型
                                      newCell.SetCellValue(drValue);
                                      break;
                                  case "System.DateTime"://日期類(lèi)型
                                      DateTime dateV;
                                      DateTime.TryParse(drValue, out dateV);
                                      //newCell.SetCellValue(dateV);
                                      newCell.SetCellValue(drValue);

                                      newCell.CellStyle = dataStyle;//格式化顯示
                                      break;
                                  case "System.Boolean"://布爾型
                                      bool boolV = false;
                                      bool.TryParse(drValue, out boolV);
                                      newCell.SetCellValue(boolV);
                                      break;
                                  case "System.Int16"://整型
                                  case "System.Int32":
                                  case "System.Int64":
                                  case "System.Byte":
                                      int intV = 0;
                                      int.TryParse(drValue, out intV);
                                      newCell.SetCellValue(intV);
                                      break;
                                  case "System.Decimal"://浮點(diǎn)型
                                  case "System.Double":
                                      double doubV = 0;
                                      double.TryParse(drValue, out doubV);
                                      newCell.SetCellValue(doubV);
                                      break;
                                  case "System.DBNull"://空值處理
                                      newCell.SetCellValue("");
                                      break;
                                  default:
                                      newCell.SetCellValue("");
                                      break;
                              }

                          }

                          //循環(huán)一行后i的值自增1
                          rowIndex++;
                      }

                      book.Write(ms);
                      ms.Flush();
                      ms.Position = 0;//指定內(nèi)存流的當(dāng)前位置
                    }

                  return ms;
              }
              #endregion

              #region 將DataReader的數(shù)據(jù)轉(zhuǎn)換成MemoryStream并返回
              public static MemoryStream RenderToExcel(IDataReader dataReader)
              {
                  MemoryStream ms = new MemoryStream();
                  using (dataReader)
                  {
                      HSSFWorkbook book = new HSSFWorkbook();
                      ISheet sheet = book.CreateSheet("數(shù)據(jù)表1");
                      //創(chuàng)建表頭
                      IRow row = sheet.CreateRow(0);
                      //列的數(shù)目
                      int columnCount = dataReader.FieldCount;
                      for (int i = 0; i < columnCount; i++)
                      {
                          row.CreateCell(i).SetCellValue(dataReader.GetName(i));
                      }

                      //創(chuàng)建數(shù)據(jù)行
                      int rowIndex = 1;
                      while (dataReader.Read())//dataReader只能一行一行地讀取數(shù)據(jù)
                      {
                          IRow dataRow = sheet.CreateRow(rowIndex);
                          for (int i = 0; i < columnCount; i++)
                          {

                              dataRow.CreateCell(i).SetCellValue(dataReader[i].ToString());
                          }

                          rowIndex++;
                      }

                      book.Write(ms);
                      ms.Flush();
                      ms.Position = 0;

                  }


                  return ms;
              }

              #endregion

              #region 將流輸出到指定的位置
              //保存輸出到文件
              public static void SaveToFile(MemoryStream ms, string fileName)
              {
                  using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
                  {
                      byte[] data = ms.ToArray();
                      fs.Write(data, 0, data.Length);
                      fs.Flush();

                      data = null;
                  }
              }
              #endregion

              #region 保存輸出到瀏覽器
              public static void SaveToBrowser(MemoryStream ms, System.Web.HttpContext context, string fileName)
              {
                  // 設(shè)置編碼和附件格式
                  context.Response.ContentType = "application/vnd.ms-excel";
                  context.Response.ContentEncoding = Encoding.UTF8;
                  context.Response.Charset = "";
                  context.Response.AppendHeader("Content-Disposition",
                      "attachment;filename=" +System.Web.HttpUtility.UrlEncode(fileName, Encoding.UTF8));

                  //添加請(qǐng)求報(bào)文頭
                  //context.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName);
                  context.Response.BinaryWrite(ms.ToArray());
                  context.Response.End();
              }
              #endregion

              #region NPOI讀取Excel流的數(shù)據(jù)相關(guān)
              public DataTable ReadFromExcel(Stream excelStream)
              {
                  DataTable dt = new DataTable();
                  using (excelStream)
                  {
                      //創(chuàng)建WorkBook
                      HSSFWorkbook book = new HSSFWorkbook(excelStream);
                      ISheet sheet = book.GetSheetAt(0);//獲取第一個(gè)表
                      //獲取第一行表頭
                      IRow headRow = sheet.GetRow(0);
                      //列數(shù)
                      int columnCount = headRow.LastCellNum;//LastCellNum=PhysicalNumberOfCells
                      int rowCount = sheet.LastRowNum;//LastRowNum=PhysicalNumberOfCellsRow-1
                      //創(chuàng)建DataTable的表頭
                      for (int i = headRow.FirstCellNum; i < columnCount; i++)
                      {
                          DataColumn dc = new DataColumn(headRow.GetCell(i).StringCellValue.ToString());
                          dt.Columns.Add(dc);
                      }
                      //創(chuàng)建數(shù)據(jù)
                      for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
                      {
                          //一行一行地創(chuàng)建
                          DataRow dr = dt.NewRow();
                          IRow dataRow = sheet.GetRow(i);
                          if (dataRow != null)
                          {
                              for (int j = headRow.FirstCellNum; j < columnCount; j++)
                              {
                                  string cellValue = dataRow.GetCell(j).StringCellValue.ToString();
                                  if (cellValue != "" || cellValue != null)
                                  {
                                      dr[j] = dataRow.GetCell(j).StringCellValue.ToString();
                                  }

                              }

                              dt.Rows.Add(dr);
                          }

                      }

       

                  }

                  return dt;
              }

              public static int RenderToDb(Stream excelFileStream, string insertSql)
              {
                  int rowAffected = 0;
                  using (excelFileStream)
                  {
                      HSSFWorkbook workbook = new HSSFWorkbook(excelFileStream);
                      ISheet sheet = workbook.GetSheetAt(0);//取第一個(gè)工作表
                      StringBuilder builder = new StringBuilder();

                      IRow headerRow = sheet.GetRow(0);//第一行為標(biāo)題行
                      int cellCount = headerRow.LastCellNum;//LastCellNum = PhysicalNumberOfCells
                      int rowCount = sheet.LastRowNum;//LastRowNum = PhysicalNumberOfRows - 1

                      for (int i = (sheet.FirstRowNum + 1); i <= rowCount; i++)
                      {
                          IRow row = sheet.GetRow(i);
                          if (row != null)
                          {
                              builder.Append(insertSql);
                              builder.Append(" values (");
                              for (int j = row.FirstCellNum; j < cellCount; j++)
                              {
                                  builder.AppendFormat("'{0}',", row.GetCell(j).StringCellValue.Replace("'", "''"));
                              }
                              builder.Length = builder.Length - 1;
                              builder.Append(");");
                          }

                          if ((i % 50 == 0 || i == rowCount) && builder.Length > 0)
                          {
                              //每50條記錄一次批量插入到數(shù)據(jù)庫(kù)
                              //rowAffected += dbAction(builder.ToString());
                              builder.Length = 0;
                          }
                      }


                  }
                  return rowAffected;
              }

              public static bool HasData(Stream excelFileStream)
              {
                  using (excelFileStream)
                  {
                      HSSFWorkbook workbook = new HSSFWorkbook(excelFileStream);
                      if (workbook.NumberOfSheets > 0)
                      {
                          ISheet sheet = workbook.GetSheetAt(0);
                          return sheet.PhysicalNumberOfRows > 0;

                      }
                  }
                  return false;
              }
              #endregion

              #endregion

          }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類(lèi)似文章 更多