亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

NPOI導入導出excel支持0307

2019-11-14 13:40:17
字體:
來源:轉載
供稿:網友

因為微軟的office成本太高了,所以開發項目的時候電腦上沒安裝office,而是安裝了wps。但開發語言用的是C#,所以直接調用微軟的office組件是很方便的,但一方面慢,一方面成本高,所以從網上找到了NPOI這個開源的項目。http://npoi.codeplex.com/,引用的dll下載目錄 http://npoi.codeplex.com/downloads/get/1476595

并且封裝了通用的處理Excel 跟DataSet,DataTable的方法。方便調用 

以上是代碼 (當前項目是.net 2.0 下的,如果需要.net 4.0則到NPOI官網下載相應的dll就可以了)

  1 using NPOI.SS.UserModel;  2 using System;  3 using System.Collections.Generic;  4 using System.Data;  5 using System.IO;  6 using System.Text;  7   8 namespace MrLiu.Tools  9 { 10     public sealed class ExcelHelper 11     { 12         #region Excel導入 13         /// <summary> 14         /// Excel 轉換為DataTable 15         /// </summary> 16         /// <param name="file">文件路徑</param> 17         /// <param name="sheetName">Sheet名稱,如果只有一個sheet可以傳 null</param> 18         /// <returns></returns> 19         public static DataTable ExcelToDataTable(string file, string sheetName) 20         { 21             try 22             { 23                 DataTable dt = new DataTable(); 24                 using (FileStream fs = new FileStream(file, FileMode.Open, Fileaccess.Read, FileShare.Read)) 25                 { 26                     var workbook = NPOI.SS.UserModel.WorkbookFactory.Create(fs); 27                     ISheet sheet = null; 28                     if (sheetName == null) 29                     { 30                         sheet = workbook.GetSheetAt(0); 31                     } 32                     else 33                     { 34                         sheet = workbook.GetSheet(sheetName); 35                     } 36                     //列名 37                     IRow rowHead = sheet.GetRow(sheet.FirstRowNum); 38                     for (int i = 0; i < rowHead.LastCellNum; i++) 39                     { 40                         string fildName = rowHead.GetCell(i).StringCellValue; 41                         dt.Columns.Add(fildName, typeof(String)); 42                     } 43  44                     //數據 45                     for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++) 46                     { 47                         IRow row = sheet.GetRow(i); 48                         DataRow dr = dt.NewRow(); 49                         for (int j = row.FirstCellNum; j < row.LastCellNum; j++) 50                         { 51                             var cell = row.GetCell(j); 52                             dr[j] = GetValueTypeForICell(cell); 53                             if (dr[j] == null) 54                             { 55                                 dr[j] = string.Empty; 56                             } 57                         } 58                         dt.Rows.Add(dr); 59                     } 60                 } 61                 return dt; 62             } 63             catch (Exception ex) 64             { 65                 throw new Exception(ex.Message); 66             } 67         } 68         /// <summary> 69         /// Excel 導入為DataTable 70         /// </summary> 71         /// <param name="file">文件路徑</param> 72         /// <param name="extension">后續名 XLS XLSX</param> 73         /// <returns></returns> 74         public static DataTable ExcelToDataTable(string file) 75         { 76             try 77             { 78                 DataTable dt = new DataTable(); 79                 string extension = Path.GetExtension(file); 80                 if (extension.ToUpper() == ".XLS") 81                 { 82                     dt = ExcelToTableForXLS(file); 83                 } 84                 else if (extension.ToUpper() == ".XLS") 85                 { 86                     dt = ExcelToTableForXLSX(file); 87                 } 88                 else 89                 { 90                     throw new Exception("文件格式不正確"); 91                 } 92                 return dt; 93             } 94             catch (Exception ex) 95             { 96                 throw new Exception(ex.Message); 97             } 98         } 99         /// <summary>100         /// 讀取xls格式的Excel101         /// </summary>102         /// <param name="file">文件全路徑</param>103         /// <returns>返回DaTaTable</returns>104         public static DataTable ExcelToTableForXLS(string file)105         {106             try107             {108                 DataTable dt = new DataTable();109                 using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))110                 {111                     var hssfworkbook = new NPOI.HSSF.UserModel.HSSFWorkbook(fs);112                     ISheet sheet = hssfworkbook.GetSheetAt(0);113 114                     //列名115                     IRow rowHead = sheet.GetRow(sheet.FirstRowNum);116                     for (int i = 0; i < rowHead.LastCellNum; i++)117                     {118                         string fildName = rowHead.GetCell(i).StringCellValue;119                         dt.Columns.Add(fildName, typeof(String));120                     }121 122                     //數據123                     for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)124                     {125                         IRow row = sheet.GetRow(i);126                         DataRow dr = dt.NewRow();127                         for (int j = row.FirstCellNum; j < row.LastCellNum; j++)128                         {129                             NPOI.HSSF.UserModel.HSSFCell cell = row.GetCell(j) as NPOI.HSSF.UserModel.HSSFCell;130                             dr[j] = GetValueTypeForXLS(cell);131                             if (dr[j] == null)132                             {133                                 break;134                             }135                         }136                         dt.Rows.Add(dr);137                     }138                 }139                 return dt;140             }141             catch (Exception ex)142             {143                 throw new Exception(ex.Message);144             }145         }146 147         /// <summary>148         /// 獲取單元格類型149         /// </summary>150         /// <param name="cell"></param>151         /// <returns></returns>152         PRivate static object GetValueTypeForXLS(NPOI.HSSF.UserModel.HSSFCell cell)153         {154             try155             {156                 if (cell == null)157                 {158                     return null;159                 }160                 switch (cell.CellType)161                 {162                     case CellType.Blank: //BLANK:  163                         return null;164                     case CellType.Boolean: //BOOLEAN:  165                         return cell.BooleanCellValue;166                     case CellType.Numeric: //NUMERIC:  167                         return cell.NumericCellValue;168                     case CellType.String: //STRING:  169                         return cell.StringCellValue;170                     case CellType.Error: //ERROR:  171                         return cell.ErrorCellValue;172                     case CellType.Formula: //FORMULA:  173                     default:174                         return "=" + cell.CellFormula;175                 }176             }177             catch (Exception ex)178             {179                 throw new Exception(ex.Message);180             }181         }182 183         /// <summary>184         /// 讀取xlsx格式的Excel185         /// </summary>186         /// <param name="file">文件全路徑</param>187         /// <returns>返回DaTaTable</returns>188         public static DataTable ExcelToTableForXLSX(string file)189         {190             try191             {192                 DataTable dt = new DataTable();193                 using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))194                 {195                     var hssfworkbook = new NPOI.XSSF.UserModel.XSSFWorkbook(fs);196                     ISheet sheet = hssfworkbook.GetSheetAt(0);197 198                     //列名199                     IRow rowHead = sheet.GetRow(sheet.FirstRowNum);200                     for (int i = 0; i < rowHead.LastCellNum; i++)201                     {202                         string fildName = rowHead.GetCell(i).StringCellValue;203                         dt.Columns.Add(fildName, typeof(String));204                     }205 206                     //數據207                     for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)208                     {209                         IRow row = sheet.GetRow(i);210                         DataRow dr = dt.NewRow();211                         for (int j = row.FirstCellNum; j < row.LastCellNum; j++)212                         {213                             NPOI.HSSF.UserModel.HSSFCell cell = row.GetCell(j) as NPOI.HSSF.UserModel.HSSFCell;214                             dr[j] = GetValueTypeForXLS(cell);215                             if (dr[j] == null)216                             {217                                 break;218                             }219                         }220                         dt.Rows.Add(dr);221                     }222                 }223                 return dt;224             }225             catch (Exception ex)226             {227                 throw new Exception(ex.Message);228             }229         }230         /// <summary>  231         /// 獲取單元格類型(xlsx)  232         /// </summary>  233         /// <param name="cell"></param>  234         /// <returns></returns>  235         private static object GetValueTypeForXLSX(NPOI.XSSF.UserModel.XSSFCell cell)236         {237             try238             {239                 if (cell == null)240                 {241                     return null;242                 }243                 switch (cell.CellType)244                 {245                     case CellType.Blank: //BLANK:  246                         return null;247                     case CellType.Boolean: //BOOLEAN:  248                         return cell.BooleanCellValue;249                     case CellType.Numeric: //NUMERIC:  250                         return cell.NumericCellValue;251                     case CellType.String: //STRING:  252                         return cell.StringCellValue;253                     case CellType.Error: //ERROR:  254                         return cell.ErrorCellValue;255                     case CellType.Formula: //FORMULA:  256                     default:257                         return "=" + cell.CellFormula;258                 }259             }260             catch (Exception ex)261             {262                 throw new Exception(ex.Message);263             }264         }265 266         /// <summary>  267         /// 獲取單元格類型不定268         /// </summary>  269         /// <param name="cell"></param>  270         /// <returns></returns>  271         private static object GetValueTypeForICell(ICell cell)272         {273             try274             {275                 if (cell == null)276                 {277                     return null;278                 }279                 switch (cell.CellType)280                 {281                     case CellType.Blank: //BLANK:  282                         return null;283                     case CellType.Boolean: //BOOLEAN:  284                         return cell.BooleanCellValue;285                     case CellType.Numeric: //NUMERIC:  286                         return cell.NumericCellValue;287                     case CellType.String: //STRING:  288                         return cell.StringCellValue;289                     case CellType.Error: //ERROR:  290                         return cell.ErrorCellValue;291                     case CellType.Formula: //FORMULA:  292                     default:293                         return "=" + cell.CellFormula;294                 }295             }296             catch (Exception ex)297             {298                 throw new Exception(ex.Message);299             }300         }301 302         /// <summary>303         /// Excel 轉換為DataSet304         /// </summary>305         /// <param name="fileName">文件名</param>306         /// <returns>DataSet</returns>307         public static DataSet ExcelToDataSet(string fileName)308         {309             try310             {311                 if (!File.Exists(fileName))312                 {313                     throw new Exception("文件不存在");314                 }315                 else316                 {317                     DataSet ds = new DataSet();318                     using (FileStream reader = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))319                     {320                         IWorkbook book = WorkbookFactory.Create(reader);321                         int cnt = book.NumberOfSheets;322                         if (cnt <= 0)323                         {324                             throw new Exception("文件不是Excel文件");325                         }326 327                         for (int i = 0; i < cnt; i++)328                         {329                             ISheet sheet = book.GetSheetAt(i);330                             DataTable dt = new DataTable(sheet.SheetName);331                             IRow rowHead = sheet.GetRow(sheet.FirstRowNum);332                             for (int j = rowHead.FirstCellNum; j < rowHead.LastCellNum; j++)333                             {334                                 ICell cell = rowHead.GetCell(j);335                                 dt.Columns.Add(cell.StringCellValue);336                             }337                             for (int j = sheet.FirstRowNum + 1; j <= sheet.LastRowNum; j++)338                             {339                                 DataRow dr = dt.NewRow();340                                 IRow row = sheet.GetRow(j);341                                 for (int k = rowHead.FirstCellNum; k < rowHead.LastCellNum; k++)342                                 {343                                     dr[k] = row.GetCell(k).StringCellValue;344                                 }345                                 dt.Rows.Add(dr);346                             }347                             ds.Tables.Add(dt);348                         }349                     }350                     return ds;351                 }352             }353             catch (Exception ex)354             {355                 throw new Exception(ex.Message);356             }357         }358         #endregion Excel導出359 360         #region Excel導出361 362         /// <summary>363         /// Excel導出364         /// </summary>365         /// <param name="dt">虛擬表</param>366         /// <param name="fileName">文件路徑</param>367         /// <param name="sheetName">Sheet路徑為空請傳null</param>368         /// <returns></returns>369         public static bool DataTableToXLS(DataTable dt, string fileName, string sheetName)370         {371             try372             {373                 if (dt == null)374                 {375                     return false;376                 }377                 if (String.IsNullOrEmpty(sheetName))378                 {379                     sheetName = Path.GetFileName(fileName);380                 }381                 var book = new NPOI.HSSF.UserModel.HSSFWorkbook();382                 book.CreateSheet();383                 var sheet = book.CreateSheet(sheetName);384 385                 IRow rowHead = sheet.CreateRow(0);386                 for (int i = 0; i < dt.Columns.Count; i++)387                 {388                     ICell cell = rowHead.CreateCell(i);389                     cell.SetCellValue(dt.Columns[i].ColumnName);390                 }391                 for (int i = 0; i < dt.Rows.Count; i++)392                 {393                     IRow row = sheet.CreateRow(i + 1);394                     for (int j = 0; j < dt.Columns.Count; j++)395                     {396                         ICell cell = row.CreateCell(j);397                         cell.SetCellValue(dt.Rows[i][j].ToString());398                     }399                 }400 401                 using (FileStream fsWriter = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.Write))402                 {403                     book.Write(fsWriter);404                     return true;405                 }406             }407             catch (Exception ex)408             {409                 throw new Exception(ex.Message);410             }411         }412 413        414         /// <summary>415         /// DataSet 導出 到Excel416         /// </summary>417         /// <param name="ds">DataSet 表名默認為sheet名</param>418         /// <param name="fileName">文件路徑</param>419         public static bool DataSetToExcel(DataSet ds, string fileName)420         {421             try422             {423                 String extension = Path.GetExtension(fileName).ToUpper();424                 IWorkbook book = null;425                 if (extension == ".XLS")426                 {427                     book = DataSetToHSSFWordbook(ds);428                 }429                 else if (extension == ".XLSX")430                 {431                     book = DataSetToXSSFWorkbook(ds);432                 }433                 else434                 {435                     throw new Exception("導入格式必須為xls或者xlsx");436                 }437 438                 using (FileStream fsWriter = new FileStream(fileName, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite))439                 {440                     book.Write(fsWriter);441                     return true;442                 }443             }444             catch (Exception ex)445             {446                 throw new Exception(ex.Message);447             }448         }449         /// <summary>450         /// DataSet 轉換為 XSSFWorkbook 07451         /// </summary>452         /// <param name="ds"></param>453         /// <returns></returns>454         private static NPOI.XSSF.UserModel.XSSFWorkbook DataSetToXSSFWorkbook(DataSet ds)455         {456             try457             {458                 var book = new NPOI.XSSF.UserModel.XSSFWorkbook();459                 foreach (DataTable dt in ds.Tables)460                 {461                     ISheet sheet = book.CreateSheet(dt.TableName);462                     IRow rowHead = sheet.CreateRow(0);463                     ICellStyle style = book.CreateCellStyle();464                     style.BorderBottom = BorderStyle.Thin;465                     style.BorderTop = BorderStyle.Thin;466                     style.BorderLeft = BorderStyle.Thin;467                     style.BorderRight = BorderStyle.Thin;468                     IFont font = book.CreateFont();469                     font.FontHeightInPoints = 12;470                     font.IsBold = true;471                     style.SetFont(font);472                     for (int i = 0; i < dt.Columns.Count; i++)473                     {474                         ICell cell = rowHead.CreateCell(i);475                         cell.CellStyle = style;476                         cell.SetCellValue(dt.Columns[i].ColumnName);477                     }478                     font.IsBold = false;479                     style.SetFont(font);480                     for (int i = 0; i < dt.Rows.Count; i++)481                     {482                         IRow row = sheet.CreateRow(i + 1);483                         DataRow dr = dt.Rows[i];484                         for (int j = 0; j < dt.Columns.Count; j++)485                         {486                             ICell cell = row.CreateCell(j);487                             cell.CellStyle = style;488                             cell.SetCellValue(dr[j].ToString());489                         }490                     }491                 }492                 return book;493             }494             catch (Exception ex)495             {496                 throw new Exception(ex.Message);497             }498         }499 500         /// <summary>501         /// DataSet 轉換為 HSSFWorkbook 03502         /// </summary>503         /// <param name="ds"></param>504         /// <returns></returns>505         private static NPOI.HSSF.UserModel.HSSFWorkbook DataSetToHSSFWordbook(DataSet ds)506         {507             try508             {509                 var book = new NPOI.HSSF.UserModel.HSSFWorkbook();510                 var dsi = NPOI.HPSF.PropertySetFactory.CreateDocumentSummaryInformation();511                 dsi.Company = "xx軟件股份有限公司";512                 var si = NPOI.HPSF.PropertySetFactory.CreateSummaryInformation();513                 si.Subject = "xx系統自動導出";514                 book.DocumentSummaryInformation = dsi;515                 book.SummaryInformation = si;516 517                 foreach (DataTable dt in ds.Tables)518                 {519                     ISheet sheet = book.CreateSheet(dt.TableName);520                     IRow rowHead = sheet.CreateRow(0);521                     ICellStyle style = book.CreateCellStyle();522                     style.BorderBottom = BorderStyle.Thin;523                     style.BorderTop = BorderStyle.Thin;524                     style.BorderLeft = BorderStyle.Thin;525                     style.BorderRight = BorderStyle.Thin;526                     IFont font = book.CreateFont();527                     font.FontHeightInPoints = 12;528                     font.IsBold = true;529                     style.SetFont(font);530                     for (int i = 0; i < dt.Columns.Count; i++)531                     {532                         ICell cell = rowHead.CreateCell(i);533                         cell.CellStyle = style;534                         cell.SetCellValue(dt.Columns[i].ColumnName);535                     }536                     font.IsBold = false;537                     style.SetFont(font);538                     for (int i = 0; i < dt.Rows.Count; i++)539                     {540                         IRow row = sheet.CreateRow(i + 1);541                         DataRow dr = dt.Rows[i];542                         for (int j = 0; j < dt.Columns.Count; j++)543                         {544                             ICell cell = row.CreateCell(j);545                             cell.CellStyle = style;546                             cell.SetCellValue(dr[j].ToString());547                         }548                     }549                 }550                 return book;551             }552             catch (Exception ex)553             {554                 throw new Exception(ex.Message);555             }556         }557 558         #endregion559     }560 }

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
隔壁老王国产在线精品| 中文字幕少妇一区二区三区| 日韩成人免费视频| 欧美性猛交xxxx免费看| 91精品国产高清久久久久久| 中文字幕亚洲情99在线| 日韩视频在线免费| 国产精品99久久久久久白浆小说| 中文字幕精品在线视频| 欧美精品一二区| 91午夜理伦私人影院| 国产午夜精品一区二区三区| 91在线高清免费观看| 一区二区国产精品视频| 亚洲人成欧美中文字幕| 色哟哟亚洲精品一区二区| 国产日韩欧美视频在线| 中文字幕日韩av综合精品| 久久久999国产| 亚洲另类图片色| 日韩中文在线中文网三级| 日韩精品免费一线在线观看| 亚洲女人被黑人巨大进入al| 中文字幕成人在线| 久久久视频精品| 日韩av资源在线播放| 亚洲free性xxxx护士hd| 国产精品欧美一区二区三区奶水| 亚洲久久久久久久久久久| 久久天天躁狠狠躁夜夜av| 精品久久久香蕉免费精品视频| 国产精品一区二区三区久久久| 国产精品亚洲综合天堂夜夜| 91av在线看| 日韩欧美一区二区三区久久| 亚洲四色影视在线观看| 伊人久久久久久久久久久久久| 色综合天天综合网国产成人网| 日韩av中文字幕在线| 日韩欧美成人免费视频| 亚洲视频电影图片偷拍一区| 91精品国产综合久久久久久蜜臀| 国产美女精品视频免费观看| 久久99国产精品自在自在app| 国产有码一区二区| 大荫蒂欧美视频另类xxxx| 午夜精品三级视频福利| 国语自产精品视频在线看| 91久久久久久久一区二区| 欧美成人免费一级人片100| 国产精品精品久久久| 插插插亚洲综合网| 日韩av在线不卡| 国产美女精彩久久| 国内精品国产三级国产在线专| 欧美性理论片在线观看片免费| 亚洲成人黄色网| 欧美综合激情网| 视频在线观看一区二区| 国产精品久久久久久久9999| 国产精品久久久久久久久久东京| 丝袜美腿亚洲一区二区| 欧美精品一区在线播放| 亚洲欧美精品中文字幕在线| 精品毛片网大全| 国产精品视频免费观看www| 亚洲高清一二三区| 国产91在线播放| 91精品国产乱码久久久久久蜜臀| 国产精品色午夜在线观看| 欧美成人精品h版在线观看| 91成品人片a无限观看| 国产欧美日韩高清| 亚洲欧洲日韩国产| 国产一区二区三区在线观看视频| 国产欧美婷婷中文| 欧美激情亚洲视频| 国产精品高精视频免费| 久久成人精品一区二区三区| 国产精品女人久久久久久| 日韩中文字幕不卡视频| 川上优av一区二区线观看| 91精品国产综合久久香蕉| 中文字幕亚洲在线| 日韩在线观看精品| 国外成人性视频| 日韩久久精品电影| 久久亚洲影音av资源网| 日韩精品极品在线观看| 亚洲国产成人精品久久| 亚洲毛片在线免费观看| 日本精品视频在线观看| 国产精品jvid在线观看蜜臀| 狠狠躁夜夜躁人人爽天天天天97| 久久中文字幕在线视频| 日韩av在线网| 亚洲欧美国产精品久久久久久久| 日韩电影中文字幕| 国产在线观看91精品一区| 欧美成人午夜激情在线| 欧美激情精品久久久久久大尺度| 亚洲国产精品成人va在线观看| 国产91在线播放精品91| 日韩欧美999| 精品国产一区二区在线| 亚洲第五色综合网| 国产精品久久久久久网站| 美日韩精品视频免费看| 国产精品电影网站| 国模私拍一区二区三区| 国产精品日韩在线播放| 91色在线观看| 国产精品久久电影观看| 国产成人精品电影久久久| 国产一区二区在线免费| 精品国产依人香蕉在线精品| 国产精品视频男人的天堂| 中文精品99久久国产香蕉| 中文字幕在线观看日韩| 中文字幕成人在线| 亚洲一区国产精品| 久久好看免费视频| 亚洲精品欧美日韩专区| 精品国产成人在线| 热久久美女精品天天吊色| 51视频国产精品一区二区| 91精品91久久久久久| 久久久久99精品久久久久| 欧美一级片在线播放| 狠狠躁夜夜躁人人爽天天天天97| 色悠悠国产精品| 中文字幕日韩在线播放| 欧美激情亚洲激情| 国产综合福利在线| 久久精品国产91精品亚洲| 2021久久精品国产99国产精品| 97在线看福利| 国产精品福利在线| 5566日本婷婷色中文字幕97| 日韩av影片在线观看| 超碰91人人草人人干| 亚洲精品一区在线观看香蕉| 亚洲精品黄网在线观看| 另类天堂视频在线观看| 亚洲最大成人免费视频| 欧美韩日一区二区| 日韩欧美在线视频| 欧美又大又硬又粗bbbbb| 国产精品白嫩美女在线观看| 亚洲欧美综合区自拍另类| 国产精品自产拍在线观| 中文字幕久久精品| 欧美激情一区二区久久久| 国产精品十八以下禁看| 亚洲人午夜精品| 在线成人一区二区| 亚洲三级 欧美三级| 国产精品xxx视频| 欧美激情乱人伦一区| 一本色道久久综合狠狠躁篇怎么玩| 岛国av一区二区三区| 国产成人精品在线观看| 欧美日韩午夜视频在线观看| 日韩高清欧美高清|