日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# EXCEL的帮助类,仅使用NPOI,不用安装Office

發(fā)布時間:2023/12/20 C# 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# EXCEL的帮助类,仅使用NPOI,不用安装Office 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

NPOI相關(guān)DLL,直接上Nuget獲取
這里作為筆記記錄一下~

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using System.Collections; using System.IO; using System.Data; using System.Windows.Forms;namespace Common.basefunc {public static class ExcelHelper{#region 輔助方法/// <summary>/// 獲取要保存的文件名稱(含完整路徑)/// </summary>/// <returns></returns>public static string GetSaveFilePath(){SaveFileDialog saveFileDig = new SaveFileDialog();saveFileDig.Filter = "Excel Office97-2003(*.xls)|*.xls|Excel Office2007及以上(*.xlsx)|*.xlsx";saveFileDig.FilterIndex = 0;saveFileDig.OverwritePrompt = true;string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//獲取當(dāng)前系統(tǒng)桌面路徑saveFileDig.InitialDirectory = dir;string filePath = null;if (saveFileDig.ShowDialog() == DialogResult.OK){filePath = saveFileDig.FileName;}return filePath;}/// <summary>/// 打開文件對話框,并返回文件的路徑/// </summary>/// <returns></returns>public static string GetOpenFilePath(){//創(chuàng)建對話框的對象OpenFileDialog ofd = new OpenFileDialog();//設(shè)置對話框的標(biāo)題ofd.Title = "請選擇要打開的文件";//設(shè)置對話框可以多選ofd.Multiselect = true;//設(shè)置對話框的初始目錄ofd.InitialDirectory = @"C:\Users\Administrator\Desktop";//設(shè)置對話框打開文件的類型ofd.Filter = "Excel文件(.xls)|*.xls|Excel文件(.xlsx)|*.xlsx";//展示對話框ofd.ShowDialog();//獲得在打開對話框中選中的文件的路徑string filePath = ofd.FileName;//全路徑return filePath;}/// <summary>/// 判斷Excel文件是否為兼容模式(.xls)/// </summary>/// <param name="filePath"></param>/// <returns></returns>public static bool GetIsCompatible(string filePath){return filePath.EndsWith(".xls", StringComparison.OrdinalIgnoreCase);}/// <summary>/// 創(chuàng)建工作薄/// </summary>/// <param name="isCompatible">true就是.xls</param>/// <returns></returns>public static IWorkbook CreateWorkbook(bool isCompatible){if (isCompatible){return new HSSFWorkbook();}else{return new XSSFWorkbook();}}/// <summary>/// 創(chuàng)建工作薄(依據(jù)文件流)/// </summary>/// <param name="isCompatible"></param>/// <param name="stream"></param>/// <returns></returns>public static IWorkbook CreateWorkbook(bool isCompatible, Stream stream){if (isCompatible){return new HSSFWorkbook(stream);}else{return new XSSFWorkbook(stream);}}#region 傳入一個文件路徑,返回一個IWorkbook對象/// <summary>/// 傳入一個文件路徑,返回一個IWorkbook對象/// </summary>/// <param name="filepath"></param>/// <returns></returns>public static IWorkbook CreateWorkbook(string filepath){IWorkbook workbook = null;bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fs = File.Open(filepath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite)){//把xls文件讀入workbook變量里,之后就可以關(guān)閉了 workbook = ExcelHelper.CreateWorkbook(isCompatible, fs);fs.Close();}return workbook;}#endregion#region 打開一個excel文件,設(shè)置單元格的值,再保存文件/// <summary>/// 打開一個excel文件,設(shè)置單元格的值,再保存文件/// </summary>/// <param name="ExcelPath"></param>/// <param name="sheetname"></param>/// <param name="column"></param>/// <param name="row"></param>/// <param name="value"></param>/// <returns></returns>public static bool SetCellValue(String ExcelPath, String sheetname, int column, int row, String value){bool returnb = false;try{IWorkbook wk = null;bool isCompatible = ExcelHelper.GetIsCompatible(ExcelPath);using (FileStream fs = File.Open(ExcelPath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite)){//把xls文件讀入workbook變量里,之后就可以關(guān)閉了 wk = ExcelHelper.CreateWorkbook(isCompatible, fs);fs.Close();}//把xls文件讀入workbook變量里,之后就可以關(guān)閉了 //ISheet sheet = wk.GetSheet(sheetname);ISheet sheet = wk.GetSheetAt(0);ICell cell = sheet.GetRow(row).GetCell(column);cell.SetCellValue(value);using (FileStream fileStream = File.Open(ExcelPath,FileMode.OpenOrCreate, FileAccess.ReadWrite)){wk.Write(fileStream);fileStream.Close();}returnb = true;}catch (Exception){returnb = false;throw;}return returnb;}#endregion#region 打開一個文件,讀取excel文件某個單元格的值(多少行,多少列)/// <summary>/// 打開一個文件,讀取excel文件某個單元格的值(多少行,多少列)/// </summary>/// <param name="ExcelPath"></param>/// <param name="sheetname"></param>/// <param name="column"></param>/// <param name="row"></param>/// <returns></returns>public static String GetCellValue(string ExcelPath, String sheetname, int column, int row){String returnStr = null;try{IWorkbook wk = null;bool isCompatible = ExcelHelper.GetIsCompatible(ExcelPath);using (FileStream fs = File.Open(ExcelPath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite)){//把xls文件讀入workbook變量里,之后就可以關(guān)閉了 wk = ExcelHelper.CreateWorkbook(isCompatible, fs);fs.Close();}//把xls文件讀入workbook變量里,之后就可以關(guān)閉了 //ISheet sheet = wk.GetSheet(sheetname);ISheet sheet = wk.GetSheetAt(0);ICell cell = sheet.GetRow(row).GetCell(column);returnStr = cell.ToString();}catch (Exception){returnStr = "Exception";throw;}return returnStr;}#endregion#region 打開一個文件,刪除多少以后的數(shù)據(jù)(是刪除,不是清空數(shù)據(jù))/// <summary>/// 打開一個文件,刪除多少以后的數(shù)據(jù)(是刪除,不是清空數(shù)據(jù))/// </summary>/// <param name="fileMatchPath"></param>/// <param name="rowIndex">從多少行后開始刪除</param>public static void DelRowsData(string fileMatchPath, int startRowIndex){IWorkbook wk = null;bool isCompatible = ExcelHelper.GetIsCompatible(fileMatchPath);using (FileStream fs = File.Open(fileMatchPath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite)){//把xls文件讀入workbook變量里,之后就可以關(guān)閉了 wk = ExcelHelper.CreateWorkbook(isCompatible, fs);fs.Close();}ISheet sheet = wk.GetSheetAt(0);for (int i = startRowIndex; i <= sheet.LastRowNum; i++){if (sheet.GetRow(i) == null){i++;continue;}sheet.RemoveRow(sheet.GetRow(i));}//轉(zhuǎn)為字節(jié)數(shù)組 MemoryStream stream = new MemoryStream();wk.Write(stream);var buf = stream.ToArray();//保存為Excel文件 這種方式能保存.xls和.xlsx文件using (FileStream fs = new FileStream(fileMatchPath, FileMode.Create, FileAccess.Write)){fs.Write(buf, 0, buf.Length);fs.Flush();}}#endregion/// <summary>/// 創(chuàng)建表格頭單元格/// </summary>/// <param name="sheet"></param>/// <returns></returns>private static ICellStyle GetCellStyle(IWorkbook workbook){ICellStyle style = workbook.CreateCellStyle();style.FillPattern = FillPattern.SolidForeground;style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;return style;}/// <summary>/// 遍歷打印二維數(shù)組/// </summary>/// <param name="array"></param>public static void PrintTwoArrayTest(object[,] array){Console.WriteLine("============測試打印二維數(shù)組==============");int row = array.GetLength(0);int column = array.GetLength(1);for (int r = 0; r < row; r++){for (int c = 0; c < column; c++){if (array[r, c] != null){string value = array[r, c].ToString();Console.Write($"{value} |");}}Console.WriteLine();}}/// <summary>/// 傳入2個二維數(shù)組,進(jìn)行條件匹配替換,返回替換后的一個二維數(shù)組/// </summary>/// <param name="refArray">參考的數(shù)組</param>/// <param name="matchArray">帶替換的數(shù)組</param>/// <param name="refColumn01">參考列1</param>/// <param name="refColumn02">參考列2</param>/// <param name="refColTarget01">被復(fù)制的值的列1</param>/// <param name="matchColumn01">帶替換的參考列1</param>/// <param name="matchColumn02">帶替換的參考列2</param>/// <param name="matchColTarget01">帶粘貼的值的列1</param>/// <returns></returns>public static string[,] GetMatchArray(string[,] refArray, string[,] matchArray, int refColumn01, int refColumn02, int refColTarget01, int matchColumn01, int matchColumn02, int matchColTarget01){Console.WriteLine("============遍歷2個二維數(shù),匹配替換==============");int row = refArray.GetLength(0);int column = matchArray.GetLength(1);int row02 = matchArray.GetLength(0);int iMatch = 0;for (int r = 0; r < row; r++){string value01 = refArray[r, refColumn01];//第1列的數(shù)據(jù)string value02 = refArray[r, refColumn02];//第2列的數(shù)據(jù)if (value01 != null && value02 != null){if (value01.Length > 0 | value02.Length > 0){for (int r02 = 0; r02 < row02; r02++){string match01 = matchArray[r02, matchColumn01];//第1列的數(shù)據(jù)string match02 = matchArray[r02, matchColumn02];//第2列的數(shù)據(jù)if (value01 == match01 && value02 == match02){matchArray[r02, matchColTarget01] = refArray[r, refColTarget01];iMatch++;Console.WriteLine($"匹配了{(lán)iMatch}次");}}}}}return matchArray;}/// <summary>/// 傳入2個數(shù)組,根據(jù)相同條件匹配,吧ref的目標(biāo)寫入match中/// </summary>/// <param name="refArray">參考的數(shù)組</param>/// <param name="matchArray">帶替換的數(shù)組</param>/// <param name="refColumn01"></param>/// <param name="refColTarget01"></param>/// <param name="matchColumn01"></param>/// <param name="matchColTarget01"></param>/// <returns></returns>public static string[,] GetMatchArray(string[,] refArray, string[,] matchArray, int refColumn01, int refColTarget01, int matchColumn01, int matchColTarget01){Console.WriteLine("============遍歷2個二維數(shù),匹配替換==============");int row = refArray.GetLength(0);int column = matchArray.GetLength(1);int row02 = matchArray.GetLength(0);int iMatch = 0;for (int r = 0; r < row; r++){string value01 = string.Empty;value01 = refArray[r, refColumn01];//遍歷第一個數(shù)組第1列的數(shù)據(jù)//value01 = value01.Trim();if (value01 != null){if (value01.Length > 0){for (int r02 = 0; r02 < row02; r02++){string match01 = string.Empty;match01 = matchArray[r02, matchColumn01];//遍歷第一個數(shù)組第1列的數(shù)據(jù)//match01 = match01.Trim(); if (value01 == match01){matchArray[r02, matchColTarget01] = refArray[r, refColTarget01];iMatch++;Console.WriteLine($"匹配了{(lán)iMatch}次");}}}}}return matchArray;}/// <summary>/// 遍歷一個數(shù)組,如果第二列的數(shù)值大于等于第一列的數(shù)值,替換字符串/// </summary>/// <param name="matchArray"></param>/// <param name="refColumn01"></param>/// <param name="refColumn02"></param>/// <param name="sValue"></param>/// <returns></returns>public static string[,] GetMatchArray(string[,] matchArray, int refColumn01, int refColumn02, string sValue){Console.WriteLine("============遍歷2個二維數(shù),匹配替換==============");int row = matchArray.GetLength(0);int column = matchArray.GetLength(1);int iMatch = 0;for (int r = 0; r < row; r++){string value01 = matchArray[r, refColumn01];//第1列的數(shù)據(jù)string value02 = matchArray[r, refColumn02];//第2列的數(shù)據(jù)try{int i01 = Convert.ToInt32(value01);int i02 = Convert.ToInt32(value02);if (i01 >= i02){matchArray[r, refColumn02] = sValue + $"(數(shù)量:{value02})";}}catch{}}return matchArray;}#region 打開excel文件,獲取某一行的數(shù)據(jù)/// <summary>/// 打開excel文件,獲取某一行的數(shù)據(jù)/// </summary>/// <param name="filepath">文件全路徑</param>/// <param name="iRow">哪一行的數(shù)據(jù)</param>/// <param name="sheet_Number">哪一個sheet表</param>/// <returns></returns>public static ArrayList GetRowData(string filepath, int sheet_Number, int iRow){ArrayList arrayList = new ArrayList();bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);IRow currentRow = sheet.GetRow(iRow - 1);for (int c = 0; c < currentRow.LastCellNum; c++){//獲取每個單元格(r行c列的數(shù)據(jù))ICell cell = currentRow.GetCell(c);//獲取單元格的內(nèi)容string value = string.Empty;if (cell != null){value = cell.ToString(); //如果單元格為空,這里會報錯的arrayList.Add(value);}}return arrayList;}}#endregion/// <summary>/// 打開excel文件,根據(jù)某一行的數(shù)據(jù),根據(jù)字符串內(nèi)容,返回這個字符串所在的列的索引/// </summary>/// <param name="filepath"></param>/// <param name="iRow"></param>/// <param name="sheet_Number">從1開始的</param>/// <param name="s1">注意字符串的順序</param>/// <param name="s2"></param>/// <param name="s3"></param>/// <returns></returnsspublic static ArrayList GetDataIndexs(string filepath, int sheet_Number, int iRow, string s1, string s2, string s3){ArrayList arrayList = new ArrayList();bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);IRow currentRow = sheet.GetRow(iRow - 1);for (int c = 0; c < currentRow.LastCellNum; c++){//獲取每個單元格(r行c列的數(shù)據(jù))ICell cell = currentRow.GetCell(c);//獲取單元格的內(nèi)容string value = string.Empty;if (cell != null){value = cell.ToString(); //如果單元格為空,這里會報錯的if (value == s1 | value == s2 || value == s3){arrayList.Add(c);}}}Console.WriteLine("==========測試打印索引值============");foreach (var a in arrayList){Console.WriteLine($"{a} |");}return arrayList;}}/// <summary>/// 打開excel文件,根據(jù)某一行的字符串,然后這個字符串所在列的索引/// </summary>/// <param name="filepath"></param>/// <param name="sheet_Number"></param>/// <param name="iRow"></param>/// <param name="sValue"></param>/// <returns></returns>public static int GetDataIndex(string filepath, int sheet_Number, int iRow, string sValue){int i = 0;bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);IRow currentRow = sheet.GetRow(iRow - 1);for (int c = 0; c < currentRow.LastCellNum; c++){//獲取每個單元格(r行c列的數(shù)據(jù))ICell cell = currentRow.GetCell(c);//獲取單元格的內(nèi)容string value = string.Empty;if (cell != null){value = cell.ToString(); //如果單元格為空,這里會報錯的if (value == sValue){i = c;}}}}return i;}/// <summary>/// 打開一個文件,把第幾行的數(shù)據(jù)取出來,返回一個字典 單元格的值:列的索引/// </summary>/// <param name="filepath"></param>/// <param name="sheet_Number">第幾張工作表(從1開始)</param>/// <param name="iRow">第幾行(從1開始)</param>/// <returns></returns>public static Dictionary<string, int> GetDataDictionary(string filepath, int sheet_Number, int iRow){Dictionary<string, int> DataDict = new Dictionary<string, int>();bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);IRow currentRow = sheet.GetRow(iRow - 1);for (int c = 0; c < currentRow.LastCellNum; c++){//獲取每個單元格(r行c列的數(shù)據(jù))ICell cell = currentRow.GetCell(c);//獲取單元格的內(nèi)容string value = string.Empty;if (cell != null){value = cell.ToString(); //如果單元格為空,這里會報錯的if (!DataDict.ContainsKey(value)){if (value == "*預(yù)計交貨日期" | value == "預(yù)計交貨日期"){value = "*預(yù)計交貨日期";}DataDict.Add(value, c);}else{if (filepath.Contains("銷售訂單")) //銷售訂單模板的第二個備注填寫收貨地址{if (value == "備注") //如果有兩個備注{//DataDict.Add("采購員", c);DataDict.Add("收貨地址", c);}}}}}//Console.WriteLine("================開始遍歷字典===============");//foreach (KeyValuePair<string, int> kv in DataDict)//通過KeyValuePair遍歷元素//{// Console.WriteLine($"Key:{kv.Key},Value:{kv.Value}");//}return DataDict;}}/// <summary>/// 打開一個文件,根據(jù)第幾張表第幾行的中的兩個字符,返回值:一個字典/// </summary>/// <param name="filepath"></param>/// <param name="sheet_Number"></param>/// <param name="strColumnKey"></param>/// <param name="strColumnValue"></param>/// <returns></returns>public static Dictionary<string, string> GetDataDictionary(string filepath, int sheet_Number, int iRow, string strColumnKey, string strColumnValue){Dictionary<string, int> dic = GetDataDictionary(filepath, 1, iRow);int iColumnKey = dic[strColumnKey];int iColumnValue = dic[strColumnValue];Dictionary<string, string> DataDict = new Dictionary<string, string>();bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);for (int i = 0; i <= sheet.LastRowNum; i++){IRow rowdata = sheet.GetRow(i);ICell cellKey = rowdata.GetCell(iColumnKey);ICell cellValue = rowdata.GetCell(iColumnValue);if (cellKey != null && cellValue != null){if (!DataDict.ContainsKey(cellKey.ToString())){string strCellKey = cellKey.ToString();string strCellValue = cellValue.ToString();DataDict.Add(strCellKey, strCellValue);}}}return DataDict;}}#region 根據(jù)一個文件,獲取一個Excel文件的最大行數(shù)和列數(shù)(不成熟不建議用)/// <summary>/// 根據(jù)一個文件,獲取一個Excel文件的最大行數(shù)和列數(shù)(不成熟不建議用)/// </summary>/// <param name="filepath">excel表格保存的地址,包括"文件名.xls</param>/// <param name="sheet_number">代表將要讀取的sheet表的索引位置</param>/// <returns>行數(shù)Array[0],列數(shù)Array[2]</returns>public static Array GetRowCountAndColumnCount(string filepath, int sheet_number){int rowMaxCount = 0;int columnMaxCount = 0;FileStream readStream = null;try{if (!string.IsNullOrEmpty(filepath) && sheet_number > 0){readStream = new FileStream(filepath, FileMode.Open, FileAccess.Read);bool isCompatible = GetIsCompatible(filepath);IWorkbook workbook = CreateWorkbook(isCompatible, readStream);ISheet sheet = workbook.GetSheetAt(sheet_number - 1);if (sheet != null){rowMaxCount = sheet.LastRowNum + 1; //有效行數(shù)(NPOI讀取的有效行數(shù)不包括列頭,所以需要加1)for (int c = 0; c <= sheet.LastRowNum; c++){IRow row = sheet.GetRow(c); #pragma warning disable CS1525 // 表達(dá)式項“=”無效if (row != null && row.LastCellNum > -1) #pragma warning restore CS1525 // 表達(dá)式項“=”無效{columnMaxCount = row.LastCellNum;}}}}}catch (Exception e){Console.WriteLine(e);throw;}finally{if (readStream != null){readStream.Close();}}int[] array = new int[2];array[1] = rowMaxCount;array[2] = columnMaxCount;return array;}#endregion/// <summary>/// Excel轉(zhuǎn)化為二維數(shù)組/// </summary>/// <param name="filepath">文件全路徑</param>/// <param name="arrayRowNnmber">數(shù)組的行數(shù)</param>/// <param name="arrayColumnNumber">數(shù)組的列數(shù)</param>/// <param name="sheet_Number">要遍歷的sheet索引</param>/// <returns>返回一個二維素組</returns>public static string[,] ToTwoArray(string filepath, int arrayRowNnmber, int arrayColumnNumber, int sheet_Number){string[,] array = new string[arrayRowNnmber, arrayColumnNumber];bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1); //獲取第一個工作表(sheet)int rowCount = sheet.LastRowNum;if (!isCompatible)//如果是xlsx格式的,行數(shù)要-2{rowCount = rowCount - 2;}for (int r = 0; r <= rowCount; r++){IRow currentRow = sheet.GetRow(r); //讀取當(dāng)前行數(shù)據(jù)Console.Write($"第{r}行有{currentRow.LastCellNum}列有數(shù)據(jù):--->");for (int c = 0; c < currentRow.LastCellNum; c++){//獲取每個單元格(r行c列的數(shù)據(jù))ICell cell = currentRow.GetCell(c);//獲取單元格的內(nèi)容string value = string.Empty;if (cell != null){value = cell.ToString(); //如果單元格為空,這里會報錯的}Console.Write($"{value} |");array[r, c] = value;}Console.WriteLine();}return array;}}/// <summary>/// 從工作表中生成DataTable/// </summary>/// <param name="sheet"></param>/// <param name="headerRowIndex"></param>/// <returns></returns>private static DataTable GetDataTableFromSheet(ISheet sheet, int headerRowIndex){DataTable table = new DataTable();IRow headerRow = sheet.GetRow(headerRowIndex);int cellCount = headerRow.LastCellNum;for (int i = headerRow.FirstCellNum; i < cellCount; i++){if (headerRow.GetCell(i) == null || headerRow.GetCell(i).StringCellValue.Trim() == ""){// 如果遇到第一個空列,則不再繼續(xù)向后讀取cellCount = i + 1;break;}DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);table.Columns.Add(column);}for (int i = (headerRowIndex + 1); i <= sheet.LastRowNum; i++){IRow row = sheet.GetRow(i);if (row != null && !string.IsNullOrEmpty(row.Cells[0].StringCellValue)){DataRow dataRow = table.NewRow();for (int j = row.FirstCellNum; j < cellCount; j++){if (row.GetCell(j) != null){dataRow[j] = row.GetCell(j).ToString();}}table.Rows.Add(dataRow);}}return table;}#endregion#region 公共導(dǎo)出方法/// <summary>/// 由DataSet導(dǎo)出Excel/// </summary>/// <param name="sourceTable">要導(dǎo)出數(shù)據(jù)的DataTable</param>/// <returns>Excel工作表</returns>public static string ExportToExcel(DataSet sourceDs, string filePath = null){if (string.IsNullOrEmpty(filePath)){filePath = GetSaveFilePath();}if (string.IsNullOrEmpty(filePath)) return null;bool isCompatible = GetIsCompatible(filePath);IWorkbook workbook = CreateWorkbook(isCompatible);ICellStyle cellStyle = GetCellStyle(workbook);for (int i = 0; i < sourceDs.Tables.Count; i++){DataTable table = sourceDs.Tables[i];string sheetName = "result" + i.ToString();ISheet sheet = workbook.CreateSheet(sheetName);IRow headerRow = sheet.CreateRow(0);// handling header.foreach (DataColumn column in table.Columns){ICell cell = headerRow.CreateCell(column.Ordinal);cell.SetCellValue(column.ColumnName);cell.CellStyle = cellStyle;}// handling value.int rowIndex = 1;foreach (DataRow row in table.Rows){IRow dataRow = sheet.CreateRow(rowIndex);foreach (DataColumn column in table.Columns){dataRow.CreateCell(column.Ordinal).SetCellValue((row[column] ?? "").ToString());}rowIndex++;}}FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);workbook.Write(fs);fs.Dispose();workbook = null;return filePath;}/// <summary>/// 獲取sheet表名/// </summary>/// <param name="filePath"></param>/// <returns></returns>public static string[] GetSheetName(string filePath){int sheetNumber = 0;var file = new FileStream(filePath, FileMode.Open, FileAccess.Read);if (filePath.IndexOf(".xlsx") > 0){//2007版本var xssfworkbook = new XSSFWorkbook(file);sheetNumber = xssfworkbook.NumberOfSheets;string[] sheetNames = new string[sheetNumber];for (int i = 0; i < sheetNumber; i++){sheetNames[i] = xssfworkbook.GetSheetName(i);}return sheetNames;}else if (filePath.IndexOf(".xls") > 0){//2003版本var hssfworkbook = new HSSFWorkbook(file);sheetNumber = hssfworkbook.NumberOfSheets;string[] sheetNames = new string[sheetNumber];for (int i = 0; i < sheetNumber; i++){sheetNames[i] = hssfworkbook.GetSheetName(i);}return sheetNames;}return null;}/// <summary>/// 根據(jù)表名獲取表/// </summary>/// <param name="filePath"></param>/// <param name="sheetName"></param>/// <returns></returns>public static DataTable ExcelToDataTable(string filePath, string sheetName){string outMsg = "";var dt = new DataTable();string fileType = Path.GetExtension(filePath).ToLower();try{ISheet sheet = null;FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);if (fileType == ".xlsx"){//2007版XSSFWorkbook workbook = new XSSFWorkbook(fs);sheet = workbook.GetSheet(sheetName);if (sheet != null){dt = GetSheetDataTable(sheet, out outMsg);}}else if (fileType == ".xls"){//2003版HSSFWorkbook workbook = new HSSFWorkbook(fs);sheet = workbook.GetSheet(sheetName);if (sheet != null){dt = GetSheetDataTable(sheet, out outMsg);}}}catch (Exception e){Console.WriteLine(e.Message);}return dt;}private static int sheetCellNumMax = 12;/// <summary>/// 獲取sheet表對應(yīng)的DataTable/// </summary>/// <param name="sheet">Excel工作表</param>/// <param name="strMsg"></param>/// <returns></returns>private static DataTable GetSheetDataTable(ISheet sheet, out string strMsg){strMsg = "";DataTable dt = new DataTable();string sheetName = sheet.SheetName;int startIndex = 0;// sheet.FirstRowNum;int lastIndex = sheet.LastRowNum;//最大列數(shù)int cellCount = 0;IRow maxRow = sheet.GetRow(0);for (int i = startIndex; i <= lastIndex; i++){IRow row = sheet.GetRow(i);if (row != null && cellCount < row.LastCellNum){cellCount = row.LastCellNum;maxRow = row;}}//列名設(shè)置try{//maxRow.LastCellNum = 12 // Lfor (int i = 0; i < sheetCellNumMax; i++)//maxRow.FirstCellNum{dt.Columns.Add(Convert.ToChar(((int)'A') + i).ToString());//DataColumn column = new DataColumn("Column" + (i + 1).ToString());//dt.Columns.Add(column);}}catch{strMsg = "工作表" + sheetName + "中無數(shù)據(jù)";return null;}//數(shù)據(jù)填充for (int i = startIndex; i <= lastIndex; i++){IRow row = sheet.GetRow(i);DataRow drNew = dt.NewRow();if (row != null){for (int j = row.FirstCellNum; j < row.LastCellNum; ++j){if (row.GetCell(j) != null){ICell cell = row.GetCell(j);switch (cell.CellType){case CellType.Blank:drNew[j] = "";break;case CellType.Numeric:short format = cell.CellStyle.DataFormat;//對時間格式(2015.12.5、2015/12/5、2015-12-5等)的處理if (format == 14 || format == 31 || format == 57 || format == 58)drNew[j] = cell.DateCellValue;elsedrNew[j] = cell.NumericCellValue;if (cell.CellStyle.DataFormat == 177 || cell.CellStyle.DataFormat == 178 || cell.CellStyle.DataFormat == 188)drNew[j] = cell.NumericCellValue.ToString("#0.00");break;case CellType.String:drNew[j] = cell.StringCellValue;break;case CellType.Formula:try{drNew[j] = cell.NumericCellValue;if (cell.CellStyle.DataFormat == 177 || cell.CellStyle.DataFormat == 178 || cell.CellStyle.DataFormat == 188)drNew[j] = cell.NumericCellValue.ToString("#0.00");}catch{try{drNew[j] = cell.StringCellValue;}catch { }}break;default:drNew[j] = cell.StringCellValue;break;}}}}dt.Rows.Add(drNew);}return dt;}/// <summary>/// 由DataTable導(dǎo)出Excel/// </summary>/// <param name="sourceTable">要導(dǎo)出數(shù)據(jù)的DataTable</param>/// <returns>Excel工作表</returns>public static string ExportToExcel(DataTable sourceTable, string sheetName = "result", string filePath = null){if (sourceTable.Rows.Count <= 0) return null;if (string.IsNullOrEmpty(filePath)){filePath = GetSaveFilePath();}if (string.IsNullOrEmpty(filePath)) return null;bool isCompatible = GetIsCompatible(filePath);IWorkbook workbook = CreateWorkbook(isCompatible);ICellStyle cellStyle = GetCellStyle(workbook);ISheet sheet = workbook.CreateSheet(sheetName);IRow headerRow = sheet.CreateRow(0);// handling header.foreach (DataColumn column in sourceTable.Columns){ICell headerCell = headerRow.CreateCell(column.Ordinal);headerCell.SetCellValue(column.ColumnName);headerCell.CellStyle = cellStyle;}// handling value.int rowIndex = 1;foreach (DataRow row in sourceTable.Rows){IRow dataRow = sheet.CreateRow(rowIndex);foreach (DataColumn column in sourceTable.Columns){dataRow.CreateCell(column.Ordinal).SetCellValue((row[column] ?? "").ToString());}rowIndex++;}FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);workbook.Write(fs);fs.Dispose();sheet = null;headerRow = null;workbook = null;return filePath;}/// <summary>/// 由List導(dǎo)出Excel/// </summary>/// <typeparam name="T">類型</typeparam>/// <param name="data">在導(dǎo)出的List</param>/// <param name="sheetName">sheet名稱</param>/// <returns></returns>public static string ExportToExcel<T>(List<T> data, IList<KeyValuePair<string, string>> headerNameList, string sheetName = "result", string filePath = null) where T : class{if (data.Count <= 0) return null;if (string.IsNullOrEmpty(filePath)){filePath = GetSaveFilePath();}if (string.IsNullOrEmpty(filePath)) return null;bool isCompatible = GetIsCompatible(filePath);IWorkbook workbook = CreateWorkbook(isCompatible);ICellStyle cellStyle = GetCellStyle(workbook);ISheet sheet = workbook.CreateSheet(sheetName);IRow headerRow = sheet.CreateRow(0);for (int i = 0; i < headerNameList.Count; i++){ICell cell = headerRow.CreateCell(i);cell.SetCellValue(headerNameList[i].Value);cell.CellStyle = cellStyle;}Type t = typeof(T);int rowIndex = 1;foreach (T item in data){IRow dataRow = sheet.CreateRow(rowIndex);for (int n = 0; n < headerNameList.Count; n++){object pValue = t.GetProperty(headerNameList[n].Key).GetValue(item, null);dataRow.CreateCell(n).SetCellValue((pValue ?? "").ToString());}rowIndex++;}FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);workbook.Write(fs);fs.Dispose();sheet = null;headerRow = null;workbook = null;return filePath;}/// <summary>/// 由DataGridView導(dǎo)出Excel/// </summary>/// <param name="grid"></param>/// <param name="sheetName"></param>/// <param name="filePath"></param>/// <returns></returns>public static string ExportToExcel(DataGridView grid, string sheetName = "result", string filePath = null){if (grid.Rows.Count <= 0) return null;if (string.IsNullOrEmpty(filePath)){filePath = GetSaveFilePath();}if (string.IsNullOrEmpty(filePath)) return null;bool isCompatible = GetIsCompatible(filePath);IWorkbook workbook = CreateWorkbook(isCompatible);ICellStyle cellStyle = GetCellStyle(workbook);ISheet sheet = workbook.CreateSheet(sheetName);IRow headerRow = sheet.CreateRow(0);for (int i = 0; i < grid.Columns.Count; i++){ICell cell = headerRow.CreateCell(i);cell.SetCellValue(grid.Columns[i].HeaderText);cell.CellStyle = cellStyle;}int rowIndex = 1;foreach (DataGridViewRow row in grid.Rows){IRow dataRow = sheet.CreateRow(rowIndex);for (int n = 0; n < grid.Columns.Count; n++){dataRow.CreateCell(n).SetCellValue((row.Cells[n].Value ?? "").ToString());}rowIndex++;}AutoColumnWidth(sheet, headerRow.LastCellNum - 1);FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);workbook.Write(fs);fs.Dispose();sheet = null;headerRow = null;workbook = null;MessageBox.Show("文件: " + filePath + ".xls 保存成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return filePath;}#endregion/// <summary>/// 自適應(yīng)列寬/// </summary>/// <param name="sheet"></param>/// <param name="cols"></param>public static void AutoColumnWidth(ISheet sheet, int cols)//獲取當(dāng)前列的寬度,然后對比本列的長度,取最大值{for (int col = 0; col <= cols; col++){sheet.AutoSizeColumn(col);//自適應(yīng)寬度,但是其實還是比實際文本要寬int columnWidth = sheet.GetColumnWidth(col) / 256;//獲取當(dāng)前列寬度for (int rowIndex = 1; rowIndex <= sheet.LastRowNum; rowIndex++){IRow row;//當(dāng)前行未被使用過if (sheet.GetRow(rowIndex) == null){row = sheet.CreateRow(rowIndex);}else{row = sheet.GetRow(rowIndex);}if (row.GetCell(col) != null){ICell cell = row.GetCell(col);int contextLength = Encoding.UTF8.GetBytes(cell.ToString()).Length;//獲取當(dāng)前單元格的內(nèi)容寬度columnWidth = columnWidth < contextLength ? contextLength : columnWidth;}}sheet.SetColumnWidth(col, columnWidth * 256);//需要注意的是列的寬度為 列寬*256,所以獲得的寬度需要處以256得到真實的寬度,同樣再設(shè)置的時候需要再乘上256才能得到正確的值}}#region 公共導(dǎo)入方法/// <summary>/// 由Excel導(dǎo)入DataTable/// </summary>/// <param name="excelFileStream">Excel文件流</param>/// <param name="sheetName">Excel工作表名稱</param>/// <param name="headerRowIndex">Excel表頭行索引</param>/// <param name="isCompatible">是否為兼容模式</param>/// <returns>DataTable</returns>public static DataTable ImportFromExcel(Stream excelFileStream, string sheetName, int headerRowIndex, bool isCompatible){IWorkbook workbook = CreateWorkbook(isCompatible, excelFileStream);ISheet sheet = null;int sheetIndex = -1;if (int.TryParse(sheetName, out sheetIndex)){sheet = workbook.GetSheetAt(sheetIndex);}else{sheet = workbook.GetSheet(sheetName);}DataTable table = GetDataTableFromSheet(sheet, headerRowIndex);excelFileStream.Close();workbook = null;sheet = null;return table;}/// <summary>/// 由Excel導(dǎo)入DataTable/// </summary>/// <param name="excelFilePath">Excel文件路徑,為物理路徑。</param>/// <param name="sheetName">Excel工作表名稱</param>/// <param name="headerRowIndex">Excel表頭行索引</param>/// <returns>DataTable</returns>public static DataTable ImportFromExcel(string excelFilePath, string sheetName, int headerRowIndex){using (FileStream stream = System.IO.File.OpenRead(excelFilePath)){bool isCompatible = GetIsCompatible(excelFilePath);return ImportFromExcel(stream, sheetName, headerRowIndex, isCompatible);}}/// <summary>/// 由Excel導(dǎo)入DataSet,如果有多個工作表,則導(dǎo)入多個DataTable/// </summary>/// <param name="excelFileStream">Excel文件流</param>/// <param name="headerRowIndex">Excel表頭行索引</param>/// <param name="isCompatible">是否為兼容模式</param>/// <returns>DataSet</returns>public static DataSet ImportFromExcel(Stream excelFileStream, int headerRowIndex, bool isCompatible){DataSet ds = new DataSet();IWorkbook workbook = CreateWorkbook(isCompatible, excelFileStream);for (int i = 0; i < workbook.NumberOfSheets; i++){ISheet sheet = workbook.GetSheetAt(i);DataTable table = GetDataTableFromSheet(sheet, headerRowIndex);ds.Tables.Add(table);}excelFileStream.Close();workbook = null;return ds;}/// <summary>/// 由Excel導(dǎo)入DataSet,如果有多個工作表,則導(dǎo)入多個DataTable/// </summary>/// <param name="excelFilePath">Excel文件路徑,為物理路徑。</param>/// <param name="headerRowIndex">Excel表頭行索引</param>/// <returns>DataSet</returns>public static DataSet ImportFromExcel(string excelFilePath, int headerRowIndex){using (FileStream stream = System.IO.File.OpenRead(excelFilePath)){bool isCompatible = GetIsCompatible(excelFilePath);return ImportFromExcel(stream, headerRowIndex, isCompatible);}}#endregion#region 公共轉(zhuǎn)換方法/// <summary>/// 將Excel的列索引轉(zhuǎn)換為列名,列索引從0開始,列名從A開始。如第0列為A,第1列為B.../// </summary>/// <param name="index">列索引</param>/// <returns>列名,如第0列為A,第1列為B...</returns>public static string ConvertColumnIndexToColumnName(int index){index = index + 1;int system = 26;char[] digArray = new char[100];int i = 0;while (index > 0){int mod = index % system;if (mod == 0) mod = system;digArray[i++] = (char)(mod - 1 + 'A');index = (index - 1) / 26;}StringBuilder sb = new StringBuilder(i);for (int j = i - 1; j >= 0; j--){sb.Append(digArray[j]);}return sb.ToString();}/// <summary>/// 轉(zhuǎn)化日期/// </summary>/// <param name="date">日期</param>/// <returns></returns>public static DateTime ConvertDate(object date){string dtStr = (date ?? "").ToString();DateTime dt = new DateTime();if (DateTime.TryParse(dtStr, out dt)){return dt;}try{string spStr = "";if (dtStr.Contains("-")){spStr = "-";}else if (dtStr.Contains("/")){spStr = "/";}string[] time = dtStr.Split(spStr.ToCharArray());int year = Convert.ToInt32(time[2]);int month = Convert.ToInt32(time[0]);int day = Convert.ToInt32(time[1]);string years = Convert.ToString(year);string months = Convert.ToString(month);string days = Convert.ToString(day);if (months.Length == 4){dt = Convert.ToDateTime(date);}else{string rq = "";if (years.Length == 1){years = "0" + years;}if (months.Length == 1){months = "0" + months;}if (days.Length == 1){days = "0" + days;}rq = "20" + years + "-" + months + "-" + days;dt = Convert.ToDateTime(rq);}}catch{throw new Exception("日期格式不正確,轉(zhuǎn)換日期失敗!");}return dt;}/// <summary>/// 轉(zhuǎn)化數(shù)字/// </summary>/// <param name="d">數(shù)字字符串</param>/// <returns></returns>public static decimal ConvertDecimal(object d){string dStr = (d ?? "").ToString();decimal result = 0;if (decimal.TryParse(dStr, out result)){return result;}else{throw new Exception("數(shù)字格式不正確,轉(zhuǎn)換數(shù)字失敗!");}}#endregion} }

總結(jié)

以上是生活随笔為你收集整理的C# EXCEL的帮助类,仅使用NPOI,不用安装Office的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

五月婷婷色丁香 | 黄色软件视频大全免费下载 | 久久午夜羞羞影院 | 国产一区成人 | 日韩欧美高清在线 | 99色 | 在线国产日韩 | 久久久国产精品一区二区中文 | 99久久9| 国产一区免费 | 狠狠色噜噜狠狠狠合久 | 在线观看久草 | 国产精品久久视频 | 欧美激情第一页xxx 午夜性福利 | 激情综合五月婷婷 | 色婷婷在线观看视频 | 国产精品久久久久久久久搜平片 | 91视频成人免费 | 最近免费中文字幕大全高清10 | 国产老太婆免费交性大片 | 中文字幕亚洲国产 | 日日射av | 97国产精品免费 | 日韩视频一区二区在线 | 国产免费观看久久 | 免费黄色网址大全 | 在线播放国产精品 | 日本公妇在线观看 | 国产精品久久久久久久午夜 | 91视频久久久久久 | 亚洲国产成人久久 | 日韩综合视频在线观看 | 波多野结衣在线观看视频 | 2021久久 | 一级c片| 婷婷激情综合网 | 亚洲免费黄色 | 日本最大色倩网站www | 国产精品wwwwww | 日韩午夜视频在线观看 | 欧美三级免费 | 激情综合站 | 中文在线字幕免 | 久久这里只有精品23 | 日韩色在线 | 日韩在线观看免费 | 国产a精品 | 国产成人亚洲在线观看 | 日本久久久久久久久久久 | 亚洲精品在线观看中文字幕 | 波多野结衣一区二区 | av三级在线免费观看 | 在线观看韩日电影免费 | 久久国产精品久久w女人spa | 97色在线观看免费视频 | 国产精品18videosex性欧美 | 视频在线日韩 | 夜夜澡人模人人添人人看 | 国产又粗又猛又黄 | 免费无遮挡动漫网站 | 久久国产系列 | 国产精品理论视频 | 成人av播放 | 国产精品久久久久9999吃药 | 久 久久影院 | 在线91精品 | 久草在线最新视频 | 在线观看免费av网站 | 一区二区三区免费在线观看视频 | 国产美女视频免费观看的网站 | 久久艹精品 | 狠狠操导航 | 久久久精品视频网站 | 九九九九热精品免费视频点播观看 | 激情综合亚洲精品 | 久久高清 | 国产区免费在线 | av免费电影在线 | 人人澡超碰碰 | 久久99精品国产一区二区三区 | 欧美日本在线观看视频 | 狠狠干天天射 | 激情av网址 | 一区二区三区久久精品 | 在线精品一区二区 | 亚洲成av人片在线观看香蕉 | 中国一级片免费看 | 永久免费看av| 亚洲黄色一级大片 | 精品国产自在精品国产精野外直播 | 久久视频在线观看中文字幕 | 久久人人爽人人爽人人片av软件 | 97人人模人人爽人人少妇 | 天天综合导航 | 91c网站色版视频 | 日韩成人免费在线观看 | 精品日韩在线一区 | 国产一区精品在线观看 | 国产精品美女网站 | 色综合国产 | 国产高清久久久 | 91色影院 | 国产在线观看免费 | 久久久美女| 99在线免费观看视频 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 精品国产综合区久久久久久 | 亚洲欧美成人网 | 伊人狠狠色 | 亚洲 中文 欧美 日韩vr 在线 | 亚洲激情五月 | 欧美大片aaa| 这里只有精彩视频 | 一区二区精品在线 | 久久久电影 | 丁香婷婷在线观看 | 中文字幕乱码电影 | 久久精品成人 | 久久人人爽爽人人爽人人片av | 国产一级片直播 | 国产成人精品一区二区三区免费 | 国产精品 日本 | 日本视频久久久 | 国产69精品久久久久99尤 | 激情 亚洲 | 久久av一区二区三区亚洲 | av资源在线看 | 成人黄色av网站 | 成 人 黄 色视频免费播放 | 六月婷婷久香在线视频 | 亚洲精品免费在线观看视频 | 国产精品一区二区在线观看 | 国产成人一区二区三区免费看 | 亚洲第一久久久 | 成年人在线播放视频 | 99视频在线精品国自产拍免费观看 | 麻花豆传媒mv在线观看网站 | 日日夜日日干 | 国产精品亚洲综合久久 | 国产精品免费在线播放 | 九色porny真实丨国产18 | 久久久久久网址 | av色影院 | 免费看在线看www777 | 国产一及片 | 免费看污的网站 | 丁香五月网久久综合 | 国产精品久久电影观看 | 91亚洲精品视频 | 日本最大色倩网站www | 国产精品黑丝在线观看 | 国产精品激情在线观看 | 日韩videos高潮hd | 一区二区三区高清在线观看 | 狠狠色丁香婷婷综合视频 | 久久久久免费精品 | 日批网站免费观看 | 久久久国产精品网站 | 国产精品久久久久久吹潮天美传媒 | 狠狠色丁香婷婷综合视频 | 亚洲一级黄色大片 | 99久久综合狠狠综合久久 | 国产精品入口麻豆 | 韩国av永久免费 | 99在线播放 | 久久免费国产电影 | 日韩电影在线一区 | 成人午夜精品 | 久草在线免费看视频 | 中文字幕专区高清在线观看 | 日韩在线观看中文 | 免费久久久久久久 | 9久久精品 | 狠狠狠狠狠狠狠狠 | 亚洲午夜在线视频 | 久草免费看 | 丁香六月天婷婷 | 成人一级片视频 | 青青久视频 | 天天操天天操天天操天天操天天操 | 国产精品久久久久aaaa九色 | 国产精品久久免费看 | 亚洲精品女人久久久 | 毛片.com| 91激情在线视频 | 国产精品一区二区精品视频免费看 | 亚洲理论片在线观看 | 欧美射射射 | 欧美精品三级在线观看 | 91看片一区二区三区 | 国产一区成人在线 | 超碰97成人| 欧美激情视频一二三区 | 国产一区高清在线观看 | 中文字幕色婷婷在线视频 | 久久久久久久久影院 | 日韩精品一区二区三区丰满 | 日韩亚洲在线视频 | 婷婷激情欧美 | 最新久久久| 成人三级网址 | 最近的中文字幕大全免费版 | 999久久a精品合区久久久 | 97高清视频 | 天天超碰 | 91丨九色丨蝌蚪丨老版 | 免费色黄 | 日本乱视频 | 成人在线免费视频 | 丁香激情综合久久伊人久久 | 久久精品8 | 日韩伦理片hd | 2022国产精品视频 | 亚洲综合导航 | 久久久久久久久国产 | 欧美一二三专区 | 中文av字幕在线观看 | 久久婷婷综合激情 | 99热手机在线观看 | 国产手机视频在线 | 99精品在线视频观看 | 国产福利专区 | 亚洲一区二区三区四区精品 | 国产精品一区二区久久精品爱微奶 | 久久精品一区二区国产 | 日韩免费一级a毛片在线播放一级 | 久久久久久久久久免费视频 | 亚洲影院国产 | 亚洲 中文 在线 精品 | 日韩免费视频网站 | 综合激情伊人 | www中文在线 | 99久久久久久国产精品 | 99久久综合国产精品二区 | 欧美激情va永久在线播放 | 国产精品久久久久久久久久久免费看 | 日韩av高清 | 日韩在线观看 | 亚洲精品玖玖玖av在线看 | 精品国产乱码久久久久久三级人 | 婷婷丁香久久五月婷婷 | 国产呻吟在线 | 国产美女免费视频 | 成人免费在线观看入口 | 丁香 婷婷 激情 | 色福利网| 青青五月天 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 日韩动漫免费观看高清完整版在线观看 | 日日碰夜夜爽 | 亚洲美女精品区人人人人 | 欧美视频不卡 | 四虎海外影库www4hu | 精品久久久久久久久久久院品网 | 天天干天天天天 | 中文字幕国产一区二区 | 激情婷婷久久 | 91九色在线观看 | 91人网站 | 国产视频手机在线 | 在线看毛片网站 | 黄视频色网站 | 国产小视频在线看 | 日本一区二区三区视频在线播放 | 一区二区三区av在线 | 亚洲精品视频一二三 | 亚洲精品久久久久久久不卡四虎 | 中文字幕第一页在线视频 | 又爽又黄在线观看 | 中文字幕综合在线 | 成年人在线播放视频 | 97久久久免费福利网址 | 一区二区三区精品在线视频 | 日韩天堂在线观看 | 成人久久久久久久久久 | 在线观看成人国产 | 日韩成人精品 | 一本一本久久a久久精品综合妖精 | 午夜少妇一区二区三区 | 青青久草在线 | 久草资源在线 | 91av视频在线播放 | 久久久久五月天 | 91在线视频在线观看 | 91视频在线播放视频 | 精品久久久久久久久久岛国gif | 日韩午夜电影网 | 国产在线观看免费观看 | 五月婷婷在线观看视频 | av免费高清观看 | 99久久99久久精品国产片 | 91在线免费观看国产 | 九七在线视频 | 天天操天天插 | 日韩资源在线 | 永久精品视频 | 婷婷色站 | 国产精久久久久久久 | 久久精品电影网 | 91视频国产高清 | 亚洲高清不卡av | 黄网av在线 | 99精品国产99久久久久久福利 | 手机看片国产 | 在线影院av | 97在线免费视频观看 | 一本一本久久aa综合精品 | av在线中文 | 午夜精品成人一区二区三区 | 久久综合久久综合这里只有精品 | 波多野结衣一区二区 | 欧美日韩亚洲在线观看 | 久久一区国产 | www.com在线观看 | 婷婷av色综合 | 6080yy午夜一二三区久久 | 日韩国产高清在线 | 久久国产亚洲精品 | 五月婷婷综合色拍 | 久久精品三 | 香蕉视频免费在线播放 | 国产福利av在线 | 91精品网站在线观看 | 亚洲精品视频免费在线观看 | 国产激情免费 | 欧美a级一区二区 | 天天操人人要 | 亚洲视频电影在线 | 中文字幕 国产 一区 | 日本中文字幕网址 | 午夜精品一区二区三区在线播放 | 视频在线观看国产 | 亚洲国产黄色片 | 二区中文字幕 | 欧美一区二区三区免费看 | 色综合婷婷 | 天天操天天摸天天爽 | 亚洲一一在线 | 国产精品成人自产拍在线观看 | 日韩二级毛片 | 最新久久免费视频 | 久久dvd| 久久久久女教师免费一区 | 在线观看视频在线 | 97免费在线视频 | 亚洲精品五月天 | 在线你懂 | 韩国av电影网| 蜜臀久久99静品久久久久久 | 9999精品| 超碰.com | 日韩av片免费在线观看 | 97夜夜澡人人爽人人免费 | 超碰在线天天 | 四虎国产永久在线精品 | 麻豆传媒视频在线 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 午夜黄色一级片 | 超碰人人草人人 | 欧美午夜一区二区福利视频 | 国产精品久久视频 | 国产午夜精品一区 | 日韩aa视频 | 成人免费观看在线视频 | 日本不卡一区二区三区在线观看 | 国产精品美女999 | 国产成人a亚洲精品 | 91人人在线| 99热9| 久久综合网色—综合色88 | 亚洲激情网站免费观看 | 绯色av一区| 日韩精品中文字幕在线 | 免费福利片 | 欧美久久九九 | 美女精品网站 | 99久久久免费视频 | 91看毛片 | 天天射天天干 | 欧美午夜寂寞影院 | 在线观看国产www | 亚洲日本中文字幕在线观看 | 五月婷香蕉久色在线看 | 人人干人人搞 | 色多多在线观看 | 中文字幕亚洲欧美 | 成人观看 | 黄色免费观看视频 | 婷婷av网站 | 狠狠操夜夜操 | 日韩成人高清在线 | 激情五月六月婷婷 | 一区二区三区精品久久久 | av电影在线不卡 | 国产精品手机在线观看 | 黄网在线免费观看 | 色.www| 日韩视频中文字幕 | 国产麻豆精品一区二区 | 亚洲欧洲成人 | 亚洲精品成人网 | 国产香蕉视频 | 国产性xxxx | 国模一区二区三区四区 | 麻豆 free xxxx movies hd | 日韩一区二区在线免费观看 | 成年人在线播放视频 | 国产精品免费一区二区三区在线观看 | 黄色网中文字幕 | 国产精品欧美精品 | 国产又粗又猛又黄又爽视频 | 999抗病毒口服液 | 韩国av一区二区 | 精品在线亚洲视频 | 国产精品18久久久久白浆 | 久久久久9999亚洲精品 | 亚洲做受高潮欧美裸体 | 日韩国产在线观看 | 最新成人在线 | 午夜在线免费观看 | www.香蕉视频 | 久草在线最新 | 日韩色在线 | 国产精品久一 | 九九精品毛片 | 久久这里只有精品首页 | 欧美一二三区在线观看 | 中文字幕在线视频一区二区三区 | 日韩亚洲在线观看 | 亚洲 欧美 国产 va在线影院 | 日韩av高清在线观看 | 99成人在线视频 | 女人18片 | 91成人天堂久久成人 | 东方av在线免费观看 | 久久免费视频在线观看30 | 天天色天天综合网 | 国产区精品 | 开心色婷婷| 五月婷婷丁香在线观看 | 国产粉嫩在线观看 | 狠狠干综合 | 黄色大片日本免费大片 | 久久好看免费视频 | 久草在线一免费新视频 | 亚洲精品网址在线观看 | 国产小视频免费观看 | 色综合久 | 中文字幕电影一区 | 久久综合色播五月 | www.国产在线视频 | 福利视频网址 | 香蕉久久国产 | 麻豆一级视频 | 国产激情电影综合在线看 | 国产三级精品三级在线观看 | 亚洲欧美视频在线播放 | 九九视频在线播放 | 日本成人黄色片 | 婷婷综合视频 | 久久伊人精品一区二区三区 | 亚洲国产成人久久综合 | 亚洲婷婷伊人 | 天天射色综合 | 黄色av在 | 中文区中文字幕免费看 | 久久99精品国产99久久6尤 | 99精品视频在线观看免费 | 国产精品久久久久久久久久三级 | 亚洲午夜久久久综合37日本 | 亚洲欧洲美洲av | 免费一级日韩欧美性大片 | 国产一级在线免费观看 | 最新国产一区二区三区 | 九草在线视频 | 久久久久久久久久久久久国产精品 | 久久综合九色欧美综合狠狠 | 中文字幕一区二区三区久久 | 日韩最新中文字幕 | 免费三级黄色 | 狠狠狠狠狠狠干 | 欧美日bb| 最近最新中文字幕视频 | 亚洲综合涩 | 国产精品孕妇 | 久久只精品99品免费久23小说 | 成人网444ppp | 久久精品com | 天天色天天骑天天射 | 久久看免费视频 | 中文字幕在线视频网站 | 人人干97 | 精品国产美女在线 | 免费日韩 精品中文字幕视频在线 | 狠狠躁夜夜躁人人爽视频 | 日日干视频 | 一区二区三区免费看 | 狠狠干婷婷| 91亚洲精品久久久蜜桃网站 | 91亚洲精品久久久久图片蜜桃 | 日韩特黄一级欧美毛片特黄 | 欧美一级视频免费看 | 久久99网 | 成人黄色片免费 | 男女拍拍免费视频 | 亚洲片在线观看 | av动态图片| 精品一区二区视频 | 久久69精品久久久久久久电影好 | 最近中文字幕完整高清 | 久久综合狠狠综合久久综合88 | 成人午夜电影免费在线观看 | 亚洲精品播放 | 国产视频亚洲精品 | www.久久99| 天天天天天天天天操 | 国产主播大尺度精品福利免费 | 久久爱综合 | www.天天射 | 久草在线中文视频 | www.色com| 免费观看一区二区三区视频 | 日韩一区二区三免费高清在线观看 | 91免费看黄 | 91成人看片| 人人澡超碰碰 | 成人久久18免费 | 最近免费观看的电影完整版 | 亚洲精品国内 | 亚洲精品欧美精品 | 99久久精品免费视频 | 成片视频在线观看 | 色婷婷综合成人av | 日韩av成人免费看 | 精品国产一区二区三区男人吃奶 | 久久精品中文字幕免费mv | 成年人在线免费看视频 | 国产美女搞久久 | 亚洲成av人片在线观看香蕉 | 超碰97免费 | 久久国产精品99久久久久久丝袜 | 在线 国产一区 | 国产99久久精品 | 国产精品视频专区 | 亚洲精品美女在线观看 | 国产一区二区在线观看视频 | 手机看片1042 | 亚洲另类人人澡 | 国产一区av在线 | 亚洲成人精品久久 | 国产成人精品久久亚洲高清不卡 | 亚洲精品视频 | 亚洲黑丝少妇 | 精品高清美女精品国产区 | 免费视频一二三 | 6080yy午夜一二三区久久 | 视频一区二区三区视频 | 91精品国产自产在线观看永久 | av中文在线播放 | av免费看在线| 午夜国产在线观看 | 国产在线视频在线观看 | 欧美精品国产综合久久 | 国产精品久久99 | 精品国产一区二区三区久久久蜜月 | 视频成人 | 亚洲精品久久久蜜桃直播 | 久久精品激情 | 91精品视频播放 | 亚洲国产中文字幕在线观看 | 91av社区| 日本少妇久久久 | 超碰人人干人人 | 美女福利视频一区二区 | www.超碰 | 国产视频不卡一区 | 岛国av在线不卡 | 五月婷婷色丁香 | av免费在线观看1 | 青草视频在线看 | 91手机视频在线 | 久久综合久久综合久久 | 亚洲国产美女久久久久 | 国产91九色视频 | 亚洲经典中文字幕 | 欧美性极品xxxx做受 | 国产中文在线播放 | 欧美另类高清 | 黄色成年| 亚洲精品乱码久久久久 | 在线视频1卡二卡三卡 | 日韩免费视频网站 | 麻豆一二 | 91精彩视频| 日韩伦理一区二区三区av在线 | aa级黄色大片 | 成人香蕉视频 | 欧美成亚洲 | 国产精品一区久久久久 | 色噜噜色噜噜 | 国产精品成人久久 | 色在线高清 | 美女久久一区 | 久草在线免费在线观看 | 久久一区二 | 超碰免费公开 | 国产精品久久久久久久久久免费看 | 男女视频91 | 久久久99久久 | 亚洲精品麻豆 | 国产黄色特级片 | 国产色婷婷在线 | 免费男女羞羞的视频网站中文字幕 | 国产黄色成人av | 久久久穴 | 玖草在线观看 | 久久深夜| 激情深爱五月 | 高清久久久久久 | 国产免费中文字幕 | 四虎在线观看 | 色偷偷人人澡久久超碰69 | 午夜视频在线观看一区二区三区 | 成人国产网站 | 国产高清黄色 | 欧美伦理一区二区三区 | 久久视频免费在线观看 | 天天看天天干 | 国产精品女同一区二区三区久久夜 | www.色综合.com | 国产馆在线播放 | 亚洲精品综合一二三区在线观看 | 亚洲综合日韩在线 | 色视频在线看 | 日本久久精品视频 | 免费看片色| 国产成人精品一区二三区 | 韩日视频在线 | 福利电影一区二区 | 97色综合 | 国产999精品久久久 免费a网站 | 在线日韩中文字幕 | 999久久国精品免费观看网站 | 高清中文字幕 | 激情视频网页 | 欧美精品视 | 色小说在线 | 亚洲三级在线播放 | 日韩视频免费观看高清 | 国内丰满少妇猛烈精品播 | 国产精品久久久久久久久久久久 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 日韩免费中文字幕 | 手机av网站 | 黄网站免费大全入口 | 美女网色 | 免费观看国产精品 | 欧美色888 | 国产亚洲成人网 | 色婷婷视频在线 | www.av小说| 在线视频中文字幕一区 | 丁香六月婷婷开心婷婷网 | 亚洲一区视频免费观看 | 国产高清视频免费观看 | 国产成人香蕉 | 久久av福利 | 天天综合久久综合 | 人人超在线公开视频 | 成人免费在线网 | 国产午夜在线观看 | 亚洲欧洲美洲av | 久久久国产影院 | 国产青春久久久国产毛片 | 国产精品手机在线观看 | 狠狠操导航 | 天天干天天玩天天操 | 国产精品久久久毛片 | 四虎在线视频 | 午夜性生活 | 婷婷丁香狠狠爱 | 久精品视频在线观看 | 午夜三级福利 | 久久伊人精品天天 | 久久久久久亚洲精品 | 欧美在线观看禁18 | 成人免费在线观看电影 | 五月婷婷国产 | 欧美成人影音 | 日韩在线一区二区免费 | 欧美激情h | 免费av大片 | 免费av看片| 国产精品高潮呻吟久久av无 | 免费观看黄 | 国产呻吟在线 | 成年人视频在线免费播放 | 黄色毛片一级 | 丰满少妇在线观看网站 | 丝袜制服综合网 | 亚洲资源 | 久久另类视频 | 久久国产片 | 天天插狠狠干 | 国外av在线 | 日韩av伦理片 | 在线观看av中文字幕 | 久久免费av电影 | 91九色网站 | 中文字幕一区二区三区精华液 | 国产字幕在线看 | 狠狠色伊人亚洲综合网站色 | 五月婷婷综合在线观看 | 超碰在线最新地址 | 国产免费叼嘿网站免费 | 成人午夜av电影 | www夜夜操com| 成人av高清在线 | 91久久精品一区二区二区 | 黄色在线看网站 | 亚洲黄色免费电影 | 精品国产乱码久久久久久浪潮 | 狠狠躁天天躁 | 中文字幕在线免费观看视频 | 草久在线观看视频 | 在线观看蜜桃视频 | 91污在线观看 | 色视频在线 | 综合网天天色 | 日本爽妇网 | 人人澡超碰碰 | 欧美91成人网 | 久久精品国产精品亚洲 | 91在线视频播放 | 中文字幕在线不卡国产视频 | 在线观看激情av | 东方av在线免费观看 | 国产特黄色片 | 伊人六月 | 久草在线精品观看 | 国产 色| 少妇性bbb搡bbb爽爽爽欧美 | 国产又粗又猛又黄又爽 | 亚洲欧美日韩国产精品一区午夜 | 中文网丁香综合网 | 亚洲综合激情五月 | 亚洲日本va在线观看 | 人人草人人草 | 国产97在线视频 | 玖玖精品视频 | 综合久久网站 | 五月激情av| 麻豆视传媒官网免费观看 | 69av视频在线 | 午夜免费福利视频 | 中文字幕视频 | 天天操天天干天天操天天干 | 久久精品国产99 | 成人一区二区三区中文字幕 | 探花视频在线观看免费 | 国产高h视频 | 久久国产精品色婷婷 | 精品国产大片 | 日韩精品一区二区三区电影 | 在线99热 | 欧美日韩p片 | 国产精品免费在线 | 爱干视频 | 久久 一区 | 91精品播放 | 一区二区三区国产欧美 | 黄色大全免费观看 | 日本黄色黄网站 | 西西444www高清大胆 | 国产一区福利 | 国产原创av片 | 久久久久久中文字幕 | 91视频 - x99av| 中文字幕在线视频国产 | 久久久久久久久久网站 | 久久99精品久久久久久秒播蜜臀 | 久久国产精品久久国产精品 | 夜色在线资源 | 不卡视频国产 | 国产欧美精品一区二区三区四区 | 999男人的天堂 | 久久免费观看少妇a级毛片 久久久久成人免费 | 国产成人精品综合久久久 | 国产精品成人一区 | 久久久午夜精品理论片中文字幕 | 人人爽人人澡 | 91精品国自产在线观看欧美 | 久久这里只有精品1 | 天天操天天摸天天射 | 国产精品久久久久毛片大屁完整版 | 99热99re6国产在线播放 | 免费视频91蜜桃 | 亚洲 欧洲 国产 日本 综合 | 日韩亚洲在线视频 | 国产一区二区在线观看免费 | 在线中文字幕av观看 | 中文字幕亚洲高清 | 日韩欧美视频在线播放 | av电影不卡 | 丁香5月婷婷久久 | 精品日韩在线一区 | 久久久综合香蕉尹人综合网 | 亚欧日韩av | 久久亚洲综合国产精品99麻豆的功能介绍 | 嫩小bbbb摸bbb摸bbb | 97超碰人人澡人人 | 激情五月综合 | 韩国av免费观看 | 免费国产一区二区视频 | 天天操天天射天天操 | 综合色影院 | 午夜神马福利 | 在线99 | 亚洲免费色 | 久久久首页 | 伊人国产女 | 91精品国产92久久久久 | 久久久久国产精品www | 中文字幕免费观看全部电影 | 99热这里精品 | 又长又大又黑又粗欧美 | 免费av观看网站 | 日日干夜夜爱 | 欧美 日韩 久久 | 亚洲精品国产精品国 | 亚洲五月 | 日韩国产高清在线 | 国产美女精品在线 | 天堂中文在线视频 | 亚洲一区二区三区在线看 | 免费看网站在线 | 最近日本韩国中文字幕 | 天天操夜夜操国产精品 | 亚洲精品一区中文字幕乱码 | 狠狠综合久久av | 日韩簧片在线观看 | 亚洲成人免费在线观看 | 日韩有码专区 | 日本不卡123区 | 国产成人高清在线 | 成年人网站免费在线观看 | 国产一区视频在线观看免费 | 99精品视频在线观看视频 | 亚洲国产成人高清精品 | 久草资源免费 | 日韩久久精品一区二区 | 欧美资源在线观看 | 国产日韩视频在线播放 | 欧美日韩免费视频 | 黄色三级网站在线观看 | 久久这里只有精品视频首页 | 绯色av一区 | 亚洲欧洲精品在线 | 在线观看亚洲电影 | 夜夜天天干 | 色综合夜色一区 | 天天视频色版 | 奇米网777 | 日韩av电影一区 | 午夜av剧场 | 国产一卡二卡在线 | av+在线播放在线播放 | 日日干夜夜骑 | 麻豆视频91 | 国产精品99久久免费黑人 | 久久久伦理 | 97免费公开视频 | 精品91| 毛片www| 久久久久久久久久久久电影 | 男女激情麻豆 | 日本性xxx | 日本激情动作片免费看 | 国产麻豆精品95视频 | 亚洲欧洲精品在线 | 国产福利专区 | 国产一区二区高清不卡 | 久久久伦理 | 婷婷丁香九月 | 国产一区二区在线播放视频 | 色婷婷激情综合 | 午夜电影中文字幕 | 碰超人人 | 久久久免费精品视频 | 久久网站av | 久久久久国产精品免费免费搜索 | 啪啪肉肉污av国网站 | 久久黄色小说 | 久久久久成 | 黄色中文字幕 | 久久久av免费 | 五月婷婷六月综合 | 27xxoo无遮挡动态视频 | 中文字幕一区二区三区在线观看 | 久久在线免费观看 | 亚洲黄色影院 | 黄色av一区二区 | 国产成人精品久久亚洲高清不卡 | 久久久一本精品99久久精品 | 成人黄色小说视频 | 亚洲1区在线 | 国产精品亚洲a | 日韩av免费一区 | 免费在线观看不卡av | 九九九在线观看视频 | 国产黄影院色大全免费 | 国产小视频在线观看 | 国产精品区在线观看 | 中文字幕第一页在线播放 | 成人av在线观 | 国产免费美女 | 福利网在线 | 久久精品电影网 | 国产99久久久国产精品免费二区 | 激情在线免费视频 | 天天操夜夜想 | 国产成人福利片 | www国产亚洲精品久久网站 | 在线视频久 | 伊人五月 | 婷婷色六月天 | 午夜精品久久久久久久久久 | 日韩性xxx| 五月精品 | 人人干人人上 | 久久精品欧美一区 | 99综合电影在线视频 | 国产成人精品在线 | 五月天色中色 | 97精品久久| 午夜免费福利片 | 国产一区二区视频在线播放 | 亚洲国产精品500在线观看 | 超碰97国产在线 | 日韩在线国产精品 | 亚洲国产日韩精品 | 天天插伊人 | 日韩欧美一区二区三区免费观看 | 成人免费在线电影 | 在线电影 一区 | 在线一区二区三区 | 99午夜| 三级黄色a| 激情久久久久久久久久久久久久久久 | 69av视频在线 | 欧美一级片免费播放 | 欧美怡红院 | 欧美一级日韩三级 | 国产综合香蕉五月婷在线 | 91桃色在线播放 | 亚洲欧美偷拍另类 | 日韩一区二区三区免费视频 | 波多野结衣一区二区三区中文字幕 | 激情综合五月 | 干天天 | 丁香花在线观看免费完整版视频 | 一区二区久久久久 | 亚洲第一中文字幕 | 亚洲精品小区久久久久久 | 久草视频免费观 | 亚洲成人黄色在线观看 | 亚洲不卡av一区二区三区 | 日本三级中文字幕在线观看 | 欧美成人黄| 四虎精品成人免费网站 | 国产久视频 | 欧美va日韩va | 国产免费二区 | 在线观看中文字幕一区二区 | 九九精品久久久 | 国产不卡高清 | 在线免费观看黄色 | 18做爰免费视频网站 | av中文字幕av | 一本大道久久精品懂色aⅴ 五月婷社区 | 在线免费中文字幕 | 国产精品福利在线播放 | 人人舔人人干 | 色婷婷在线观看视频 | 国产精品免费久久久 | 99热精品免费观看 | 天堂av在线网 | 欧美激情视频一区 | 一区二区三区免费在线 | 久久国产精品久久精品 | 免费看片成人 | 免费高清男女打扑克视频 | 国产精品专区在线观看 | 日韩午夜大片 | 在线观看黄a | 天天做日日爱夜夜爽 | 最近乱久中文字幕 | 中文有码在线 |