亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用NPOI實現導入導出csv、xls、xlsx數據功能

系統 2475 0

直接上代碼

首先定義一個接口

        
          1
        
        
          public
        
        
          interface
        
        
           ITransferData


        
        
          2
        
        
              {


        
        
          3
        
        
                  Stream GetStream(DataTable table);


        
        
          4
        
        
                  DataTable GetData(Stream stream);


        
        
          5
        
             }
      
View Code

如果需要直接操作文件的話,就自己在封裝一次

然后定義csv類的具體實現

        
          public
        
        
          class
        
        
           CsvTransferData : ITransferData

    {

        
        
        
          private
        
        
           Encoding _encode;

        
        
        
          public
        
        
           CsvTransferData()

        {

            
        
        
          this
        
        ._encode = Encoding.GetEncoding(
        
          "
        
        
          utf-8
        
        
          "
        
        
          );

        }



        
        
        
          public
        
        
           Stream GetStream(DataTable table)

        {

            StringBuilder sb 
        
        = 
        
          new
        
        
           StringBuilder();

            
        
        
          if
        
         (table != 
        
          null
        
         && table.Columns.Count > 
        
          0
        
         && table.Rows.Count > 
        
          0
        
        
          )

            {

                
        
        
          foreach
        
         (DataRow item 
        
          in
        
        
           table.Rows)

                {

                    
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < table.Columns.Count; i++
        
          )

                    {

                        
        
        
          if
        
         (i > 
        
          0
        
        
          )

                        {

                            sb.Append(
        
        
          "
        
        
          ,
        
        
          "
        
        
          );

                        }

                        
        
        
          if
        
         (item[i] != 
        
          null
        
        
          )

                        {

                            sb.Append(
        
        
          "
        
        
          \"
        
        
          "
        
        ).Append(item[i].ToString().Replace(
        
          "
        
        
          \"
        
        
          "
        
        , 
        
          "
        
        
          \"\"
        
        
          "
        
        )).Append(
        
          "
        
        
          \"
        
        
          "
        
        
          );

                        }

                    }

                    sb.Append(
        
        
          "
        
        
          \n
        
        
          "
        
        
          );

                }

            }

            MemoryStream stream 
        
        = 
        
          new
        
        
           MemoryStream(_encode.GetBytes(sb.ToString()));

            
        
        
          return
        
        
           stream;

        }



        
        
        
          public
        
        
           DataTable GetData(Stream stream)

        {

            
        
        
          using
        
        
           (stream)

            {

                
        
        
          using
        
         (StreamReader input = 
        
          new
        
        
           StreamReader(stream, _encode))

                {

                    
        
        
          using
        
         (CsvReader csv = 
        
          new
        
         CsvReader(input, 
        
          false
        
        
          ))

                    {

                        DataTable dt 
        
        = 
        
          new
        
        
           DataTable();

                        
        
        
          int
        
         columnCount =
        
           csv.FieldCount;

                        
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < columnCount; i++
        
          )

                        {

                            dt.Columns.Add(
        
        
          "
        
        
          col
        
        
          "
        
         +
        
           i.ToString());

                        }



                        
        
        
          while
        
        
           (csv.ReadNextRecord())

                        {

                            DataRow dr 
        
        =
        
           dt.NewRow();

                            
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < columnCount; i++
        
          )

                            {

                                
        
        
          if
        
         (!
        
          string
        
        
          .IsNullOrWhiteSpace(csv[i]))

                                {

                                    dr[i] 
        
        =
        
           csv[i];

                                }

                            }

                            dt.Rows.Add(dr);

                        }

                        
        
        
          return
        
        
           dt;

                    }



                }

            }

        }

    }
        
      
View Code

這個需要引入命名空間LumenWorks.Framework.IO.Csv;
可以Nuget里面下

接著定義excel的實現類的基類

        
          public
        
        
          abstract
        
        
          class
        
        
           ExcelTransferData : ITransferData

    {

        
        
        
          protected
        
        
           IWorkbook _workBook;



        
        
        
          public
        
        
          virtual
        
        
           Stream GetStream(DataTable table)

        {

            
        
        
          var
        
         sheet =
        
           _workBook.CreateSheet();

            
        
        
          if
        
         (table != 
        
          null
        
        
          )

            {

                
        
        
          var
        
         rowCount =
        
           table.Rows.Count;

                
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < table.Rows.Count; i++
        
          )

                {

                    
        
        
          var
        
         row =
        
           sheet.CreateRow(i);

                    
        
        
          for
        
         (
        
          int
        
         j = 
        
          0
        
        ; j < table.Columns.Count; j++
        
          )

                    {

                        
        
        
          var
        
         cell =
        
           row.CreateCell(j);

                        
        
        
          if
        
         (table.Rows[i][j] != 
        
          null
        
        
          )

                        {

                            cell.SetCellValue(table.Rows[i][j].ToString());

                        }

                    }

                }

            }            

            MemoryStream ms 
        
        = 
        
          new
        
        
           MemoryStream();

            _workBook.Write(ms);

            
        
        
          return
        
        
           ms;

        }



        
        
        
          public
        
        
          virtual
        
        
           DataTable GetData(Stream stream)

        {

            
        
        
          using
        
        
           (stream)

            {

                
        
        
          var
        
         sheet = _workBook.GetSheetAt(
        
          0
        
        
          );

                
        
        
          if
        
         (sheet != 
        
          null
        
        
          )

                {

                    
        
        
          var
        
         headerRow = sheet.GetRow(
        
          0
        
        
          );

                    DataTable dt 
        
        = 
        
          new
        
        
           DataTable();

                    
        
        
          int
        
         columnCount =
        
           headerRow.Cells.Count;

                    
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < columnCount; i++
        
          )

                    {

                        dt.Columns.Add(
        
        
          "
        
        
          col_
        
        
          "
        
         +
        
           i.ToString());

                    }

                    
        
        
          var
        
         row =
        
           sheet.GetRowEnumerator();

                    
        
        
          while
        
        
           (row.MoveNext())

                    {

                        
        
        
          var
        
         dtRow =
        
           dt.NewRow();

                        
        
        
          var
        
         excelRow = row.Current 
        
          as
        
        
           IRow;

                        
        
        
          for
        
         (
        
          int
        
         i = 
        
          0
        
        ; i < columnCount; i++
        
          )

                        {

                            
        
        
          var
        
         cell =
        
           excelRow.GetCell(i);



                            
        
        
          if
        
         (cell != 
        
          null
        
        
          )

                            {

                                dtRow[i] 
        
        =
        
           GetValue(cell);

                            }

                        }

                        dt.Rows.Add(dtRow);

                    }

                    
        
        
          return
        
        
           dt;

                }

            }



            
        
        
          return
        
        
          null
        
        
          ;

        }





        
        
        
          private
        
        
          object
        
        
           GetValue(ICell cell)

        {

            
        
        
          object
        
         value = 
        
          null
        
        
          ;

            
        
        
          switch
        
        
           (cell.CellType)

            {

                
        
        
          case
        
        
           CellType.BLANK:

                    
        
        
          break
        
        
          ;

                
        
        
          case
        
        
           CellType.BOOLEAN:

                    value 
        
        = cell.BooleanCellValue ? 
        
          "
        
        
          1
        
        
          "
        
         : 
        
          "
        
        
          0
        
        
          "
        
        ; 
        
          break
        
        
          ;

                
        
        
          case
        
        
           CellType.ERROR:

                    value 
        
        = cell.ErrorCellValue; 
        
          break
        
        
          ;

                
        
        
          case
        
        
           CellType.FORMULA:

                    value 
        
        = 
        
          "
        
        
          =
        
        
          "
        
         + cell.CellFormula; 
        
          break
        
        
          ;

                
        
        
          case
        
        
           CellType.NUMERIC:

                    value 
        
        = cell.NumericCellValue.ToString(); 
        
          break
        
        
          ;

                
        
        
          case
        
        
           CellType.STRING:

                    value 
        
        = cell.StringCellValue; 
        
          break
        
        
          ;

                
        
        
          case
        
        
           CellType.Unknown:

                    
        
        
          break
        
        
          ;

            }

            
        
        
          return
        
        
           value;

        }



    }
        
      
View Code

這個需要下載NPOI 2.01版本?

下載地址 http://npoi.codeplex.com/releases/view/92382

接著實現2003版本

        
          public
        
        
          class
        
        
           XlsTransferData : ExcelTransferData

    {

        
        
        
          public
        
        
          override
        
        
           Stream GetStream(DataTable table)

        {

            
        
        
          base
        
        ._workBook = 
        
          new
        
        
           HSSFWorkbook();

            
        
        
          return
        
        
          base
        
        
          .GetStream(table);

        }



        
        
        
          public
        
        
          override
        
        
           DataTable GetData(Stream stream)

        {

            
        
        
          base
        
        ._workBook = 
        
          new
        
        
           HSSFWorkbook(stream);

            
        
        
          return
        
        
          base
        
        
          .GetData(stream);

        }

    }
        
      
View Code

接著實現2007版本

        
          public
        
        
          class
        
        
           XlsxTransferData : ExcelTransferData

    {



        
        
        
          public
        
        
          override
        
        
           Stream GetStream(DataTable table)

        {

            
        
        
          base
        
        ._workBook = 
        
          new
        
        
           XSSFWorkbook();

            
        
        
          return
        
        
          base
        
        
          .GetStream(table);

        }



        
        
        
          public
        
        
          override
        
        
           DataTable GetData(Stream stream)

        {

            
        
        
          base
        
        ._workBook = 
        
          new
        
        
           XSSFWorkbook(stream);

            
        
        
          return
        
        
          base
        
        
          .GetData(stream);

        }

    }
        
      
View Code

然后定義一個枚舉實現一個簡單的工廠

        
          public
        
        
          enum
        
        
           DataFileType

    {

        CSV,

        XLS,

        XLSX

    }



    
        
        
          public
        
        
          class
        
        
           TransferDataFactory

    {

        
        
        
          public
        
        
          static
        
         ITransferData GetUtil(
        
          string
        
        
           fileName)

        {

            
        
        
          var
        
         array = fileName.Split(
        
          '
        
        
          .
        
        
          '
        
        
          );

            
        
        
          var
        
         dataType = (DataFileType)Enum.Parse(
        
          typeof
        
        (DataFileType), array[array.Length - 
        
          1
        
        ], 
        
          true
        
        
          );

            
        
        
          return
        
        
           GetUtil(dataType);

        }



        
        
        
          public
        
        
          static
        
        
           ITransferData GetUtil(DataFileType dataType)

        {

            
        
        
          switch
        
        
           (dataType)

            {

                
        
        
          case
        
         DataFileType.CSV: 
        
          return
        
        
          new
        
        
           CsvTransferData();

                
        
        
          case
        
         DataFileType.XLS: 
        
          return
        
        
          new
        
        
           XlsTransferData();

                
        
        
          case
        
         DataFileType.XLSX: 
        
          return
        
        
          new
        
        
           XlsxTransferData();

                
        
        
          default
        
        : 
        
          return
        
        
          new
        
        
           CsvTransferData();

            }

        }



    }
        
      
View Code

客戶端調用代碼

        
          class
        
        
           Program

    {

        
        
        
          static
        
        
          void
        
         Main(
        
          string
        
        
          [] args)

        {

            
        
        
          var
        
         fileName = 
        
          @"
        
        
          C:/Users/ranrx/Desktop/data.xlsx
        
        
          "
        
        
          ;

            FileStream stream 
        
        = 
        
          new
        
        
           FileStream(fileName, FileMode.Open, FileAccess.Read);

            
        
        
          var
        
         util =
        
           TransferDataFactory.GetUtil(fileName);

            
        
        
          var
        
         data =
        
           util.GetData(stream);

            
        
        
          var
        
         mStream =
        
           util.GetStream(data);         



        }

    }
        
      
View Code

?

?

?

用NPOI實現導入導出csv、xls、xlsx數據功能


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美区国产区 | 久久99精品久久久久久牛牛影视 | 天天躁狠狠躁 | 国产在线一区二区三区 | 色综合久久加勒比高清88 | 久久综合视频网 | 国产精品久久久久孕妇 | 色天天色综合 | 国产精品免费看香蕉 | 五月婷婷激情网 | 视频一区免费 | 国产精品亚洲二线在线播放 | 加勒比一本大道在线 | 天天做天天欢天天爽 | 俄罗斯老妇性欧美毛茸茸孕交 | 色视频网站人成免费 | 青草社区在线观看 | 欧美日韩在线观看视频 | 国产免费一级高清淫日本片 | 99精品国产高清一区二区 | 日本伊人久久 | 亚洲欧洲日本在线 | 一级毛片aaa片免费观看 | 激情亚洲综合网 | 香蕉视频亚洲一级 | 国产观看精品一区二区三区 | 亚洲视频一区在线播放 | 在线日韩不卡 | 四虎影视永久免费观看网址 | 3级毛片 | 亚洲精品一区二 | 久精品视频| 四虎海外影院 | 婷婷色综合久久 | 想看一级毛片 | 日本中文字幕一区二区 | 免费看一区二区三区 | 91久久国产综合精品女同国语 | 久青草国产手机在线观 | 日韩欧美亚洲每的更新在线 | 午夜dj影院在线视频观看完整 |