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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...

發布時間:2024/9/20 数据库 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

項目中常用到將數據導入Excel,將Excel中的數據導入數據庫的功能,曾經也查找過相關的內容,將曾經用過的方案總結一下。

方案一

NPOI

NPOI 是 POI 項目的 .NET 版本。POI是一個開源的Java讀寫Excel、WORD等微軟OLE2組件文檔的項目。
使用 NPOI 你就可以在沒有安裝 Office 或者相應環境的機器上對 WORD/EXCEL 文檔進行讀寫。NPOI是構建在POI 3.x版本之上的,它可以在沒有安裝Office的情況下對Word/Excel文檔進行讀寫操作。

優勢

(一)傳統操作Excel遇到的問題:
1、如果是.NET,需要在服務器端裝Office,且及時更新它,以防漏洞,還需要設定權限允許.NET訪問COM+,如果在導出過程中出問題可能導致服務器宕機。
2、Excel會把只包含數字的列進行類型轉換,本來是文本型的,Excel會將其轉成數值型的,比如編號000123會變成123。
3、導出時,如果字段內容以“-”或“=”開頭,Excel會把它當成公式進行,會報錯。
4、Excel會根據Excel文件前8行分析數據類型,如果正好你前8行某一列只是數字,那它會認為該列為數值型,自動將該列轉變成類似1.42702E+17格式,日期列變成包含日期和數字的。(二)使用NPOI的優勢
1、您可以完全免費使用該框架
2、包含了大部分EXCEL的特性(單元格樣式、數據格式、公式等等)
3、專業的技術支持服務(24*7全天候) (非免費)
4、支持處理的文件格式包括xls, xlsx, docx.
5、采用面向接口的設計架構( 可以查看 NPOI.SS 的命名空間)
6、同時支持文件的導入和導出
7、基于.net 2.0 也支持xlsx 和 docx格式(當然也支持.net 4.0)
8、來自全世界大量成功且真實的測試Cases
9、大量的實例代碼
11、你不需要在服務器上安裝微軟的Office,可以避免版權問題。
12、使用起來比Office PIA的API更加方便,更人性化。
13、你不用去花大力氣維護NPOI,NPOI Team會不斷更新、改善NPOI,絕對省成本。
NPOI之所以強大,并不是因為它支持導出Excel,而是因為它支持導入Excel,并能“理解”OLE2文檔結構,這也是其他一些Excel讀寫庫比較弱的方面。通常,讀入并理解結構遠比導出來得復雜,因為導入你必須假設一切情況都是可能的,而生成你只要保證滿足你自己需求就可以了,如果把導入需求和生成需求比做兩個集合,那么生成需求通常都是導入需求的子集,這一規律不僅體現在Excel讀寫庫中,也體現在pdf讀寫庫中,目前市面上大部分的pdf庫僅支持生成,不支持導入。

構成

?NPOI 1.2.x主要由POIFS、DDF、HPSF、HSSF、SS、Util六部分組成。

NPOI.POIFS OLE2/ActiveX文檔屬性讀寫庫
NPOI.DDF Microsoft Office Drawing讀寫庫
NPOI.HPSF OLE2/ActiveX文檔讀寫庫
NPOI.HSSF Microsoft Excel BIFF(Excel 97-2003)格式讀寫庫
NPOI.SS Excel公用接口及Excel公式計算引擎
NPOI.Util 基礎類庫,提供了很多實用功能,可用于其他讀寫文件格式項目的開發
NPOI組成部分 NPOI 1.x的最新版為NPOI 1.2.5,其中包括了以下功能: 1、讀寫OLE2文檔 2、讀寫DocummentSummaryInformation和SummaryInformation 3、基于LittleEndian的字節讀寫 4、讀寫Excel BIFF格式 5、識別并讀寫Excel BIFF中的常見Record,如RowRecord, StyleRecord, ExtendedFormatRecord 6、支持設置單元格的高、寬、樣式等 7、支持調用部分Excel內建函數,比如說sum, countif以及計算符號 8、支持在生成的XLS內嵌入打印設置,比如說橫向/縱向打印、縮放、使用的紙張等。 NPOI 2.0主要由SS, HPSF, DDF, HSSF, XWPF, XSSF, OpenXml4Net, OpenXmlFormats組成,具體列表如下:
Assembly名稱模塊/命名空間說明
NPOI.DLL NPOI.POIFS OLE2/ActiveX文檔屬性讀寫庫
NPOI.DLL NPOI.DDF 微軟Office Drawing讀寫庫
NPOI.DLL NPOI.HPSF OLE2/ActiveX文檔讀寫庫
NPOI.DLL NPOI.HSSF 微軟Excel BIFF(Excel 97-2003, doc)格式讀寫庫
NPOI.DLL NPOI.SS Excel公用接口及Excel公式計算引擎
NPOI.DLL NPOI.Util 基礎類庫,提供了很多實用功能,可用于其他讀寫文件格式項目的開發
NPOI.OOXML.DLLNPOI.XSSFExcel 2007(xlsx)格式讀寫庫
NPOI.OOXML.DLLNPOI.XWPFWord 2007(docx)格式讀寫庫
NPOI.OpenXml4Net.DLLNPOI.OpenXml4NetOpenXml底層zip包讀寫庫
NPOI.OpenXmlFormats.DLLNPOI.OpenXmlFormats微軟Office OpenXml對象關系庫

(以上內容來自百度百科)從上表可知NPOI組件已支持excel2007,記得之前用的時候只支持excel2003。很久沒研究過這玩意兒了。

案例

?官網地址:http://npoi.codeplex.com/,可以從官網下載NPOI2.X版本的。

?首先引入

ICSharpCode.SharpZipLib.dll

NPOI.dll

NPOI.OOXML.dll

NPOI.OpenXml4Net.dll

NPOI.OpenXmlFormats.dll

然后引入命名空間:

using NPOI.XSSF.UserModel; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel;

????? 輔助類

NPOIExcelHelper

參考:http://www.cnblogs.com/Joetao/articles/3247909.html

測試結果

導入Excel,student.xlsx

導入DataTable,這里只將數據導入DataTable,導入數據庫部分,就不再寫了。

測試數據,向qq群里一朋友要的。大概有5w多條,lz機子是老爺機跑不起,只導出了其中的1k條。

方案二

利用office的com組件

首先添加com引用

引入命名空間

using Excel = Microsoft.Office.Interop.Excel;

?Com操作Excel輔助類

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Excel = Microsoft.Office.Interop.Excel; using System.Web.UI; using System.Web; using System.Data; namespace Wolfy.Common {/// <summary>/// 使用com組件 操作Excel/// </summary>public class ComExcelHelper{private Excel.Application appExcel = null;private Excel.Workbook workbook = null;private Excel.Worksheet sheet = null;private DateTime dtBefore;private DateTime dtAfter;private string filePath;public string FilePath{get { return filePath; }set { filePath = value; }}private string timestamp;/// <summary>/// 以時間字符串作為保存文件的名稱/// </summary>public string Timestamp{get { return timestamp; }set { timestamp = value; }}private object mValue = System.Reflection.Missing.Value;/// <summary>///是否打開Excel界面 /// </summary>public bool Visible{set{appExcel.Visible = value;}}public ComExcelHelper(){this.dtBefore = DateTime.Now;appExcel = new Excel.Application();this.dtAfter = DateTime.Now;this.timestamp = DateTime.Now.ToShortDateString().Replace("-", "") + DateTime.Now.ToShortDateString().Replace("-", "") + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();}public ComExcelHelper(string strFilePath){this.dtBefore = DateTime.Now;appExcel = new Excel.Application();this.dtAfter = DateTime.Now;this.workbook = (Excel.Workbook)appExcel.Workbooks.Open(strFilePath, mValue, false, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue);this.timestamp = DateTime.Now.ToShortDateString().Replace("-", "") + DateTime.Now.ToShortDateString().Replace("-", "") + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();}public void Dispose(){try{System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);sheet = null;workbook.Close(false, mValue, mValue);System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);workbook = null;appExcel.Quit();System.Runtime.InteropServices.Marshal.ReleaseComObject(appExcel);appExcel = null;GC.Collect();GC.WaitForPendingFinalizers();}catch (Exception ex){throw ex;}finally{foreach (System.Diagnostics.Process pro in System.Diagnostics.Process.GetProcessesByName("Excel")){if (pro.StartTime > this.dtBefore && pro.StartTime < this.dtAfter){pro.Kill();}}}System.GC.SuppressFinalize(this);}/// <summary>/// 加載Excel/// </summary>public void Load(){if (workbook == null && this.filePath != null){workbook = appExcel.Workbooks.Open(this.filePath, mValue, false, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue);}}/// <summary>/// 加載Excel/// </summary>public void Load(string strFilePath){if (workbook == null){workbook = appExcel.Workbooks.Open(strFilePath, mValue, false, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue);}}/// <summary>/// 新建工作表/// </summary>/// <param name="sheetName"></param>public void NewWorkSheet(string sheetName){sheet = workbook.Sheets.Add(workbook.Sheets[1], mValue, mValue, mValue);sheet.Name = sheetName;}/// <summary>/// 在指定的單元格插入指定的值/// </summary>/// <param name="strCell">單元格 如"A4"</param>/// <param name="objValue">文本 數字等值</param>public void WriteCell(string strCell, object objValue){sheet.get_Range(strCell, mValue).Value2 = objValue;}/// <summary>/// 在指定Range中插入指定的值/// </summary>/// <param name="strStartCell">Range的開始單元格</param>/// <param name="strEndCell">Range的結束單元格</param>/// <param name="objValue">文本、數字等值</param>public void WriteRange(string strStartCell, string strEndCell, object objValue){sheet.get_Range(strStartCell, strEndCell).Value2 = objValue;}/**//// <summary>/// 合并單元格,并在合并后的單元格中插入指定的值/// </summary>/// <param name="strStartCell"></param>/// <param name="strEndCell"></param>/// <param name="objValue"></param>public void WriteAfterMerge(string strStartCell, string strEndCell, object objValue){sheet.get_Range(strStartCell, strEndCell).Merge(mValue);sheet.get_Range(strStartCell, mValue).Value2 = objValue;}/**//// <summary>/// 在連續單元格中插入一個DataTable中的值/// </summary>/// <param name="strStartCell">開始的單元格</param>/// <param name="dtData">存儲數據的DataTable</param>public void WriteTable(string strStartCell, System.Data.DataTable dtData){object[,] arrData = new object[dtData.Rows.Count, dtData.Columns.Count];for (int i = 0; i < dtData.Rows.Count; i++)for (int j = 0; j < dtData.Columns.Count; j++)arrData[i, j] = dtData.Rows[i][j];sheet.get_Range(strStartCell, this.GetEndCell(strStartCell, dtData.Rows.Count - 1, dtData.Columns.Count - 1)).Value2 = arrData;arrData = null;}/**//// <summary>/// 在連續單元格中插入一個DataTable并作超級鏈接/// </summary>/// <param name="strStartCell">起始單元格標識符</param>/// <param name="dtData">存儲數據的DataTable</param>/// <param name="strLinkField">鏈接的地址字段</param>/// <param name="strTextField">鏈接的文本字段</param>public void WriteTableAndLink(string strStartCell, System.Data.DataTable dtData, string strLinkField, string strTextField){object[,] arrData = new object[dtData.Rows.Count, dtData.Columns.Count - 1];for (int i = 0; i < dtData.Rows.Count; i++){for (int j = 0; j < dtData.Columns.Count; j++){if (j > dtData.Columns.IndexOf(strLinkField))arrData[i, j - 1] = dtData.Rows[i][j];else if (j < dtData.Columns.IndexOf(strLinkField))arrData[i, j] = dtData.Rows[i][j];}}sheet.get_Range(strStartCell, this.GetEndCell(strStartCell, dtData.Rows.Count - 1, dtData.Columns.Count - 2)).Value2 = arrData;for (int i = 0; i < dtData.Rows.Count; i++)this.AddHyperLink(this.NtoL(this.LtoN(this.GetCellLetter(strStartCell)) + dtData.Columns.IndexOf(strTextField)) + System.Convert.ToString(this.GetCellNumber(strStartCell) + i), dtData.Rows[i][strLinkField].ToString() + ".htm", "點擊查看詳細", dtData.Rows[i][strTextField].ToString());arrData = null;}/**//// <summary>/// 為單元格設置公式/// </summary>/// <param name="strCell">單元格標識符</param>/// <param name="strFormula">公式</param>public void SetFormula(string strCell, string strFormula){sheet.get_Range(strCell, mValue).Formula = strFormula;}/**//// <summary>/// 設置單元格或連續區域的字體為黑體/// </summary>/// <param name="strCell">單元格標識符</param>public void SetBold(string strCell){sheet.get_Range(strCell, mValue).Font.Bold = true;}/**//// <summary>/// 設置連續區域的字體為黑體/// </summary>/// <param name="strStartCell">開始單元格標識符</param>/// <param name="strEndCell">結束單元格標識符</param>public void SetBold(string strStartCell, string strEndCell){sheet.get_Range(strStartCell, strEndCell).Font.Bold = true;}/**//// <summary>/// 設置單元格或連續區域的字體顏色/// </summary>/// <param name="strCell">單元格標識符</param>/// <param name="clrColor">顏色</param>public void SetColor(string strCell, System.Drawing.Color clrColor){sheet.get_Range(strCell, mValue).Font.Color = System.Drawing.ColorTranslator.ToOle(clrColor);}/**//// <summary>/// 設置連續區域的字體顏色/// </summary>/// <param name="strStartCell">開始單元格標識符</param>/// <param name="strEndCell">結束單元格標識符</param>/// <param name="clrColor">顏色</param>public void SetColor(string strStartCell, string strEndCell, System.Drawing.Color clrColor){sheet.get_Range(strStartCell, strEndCell).Font.Color = System.Drawing.ColorTranslator.ToOle(clrColor);}/**//// <summary>/// 設置單元格或連續區域的邊框:上下左右都為黑色連續邊框/// </summary>/// <param name="strCell">單元格標識符</param>public void SetBorderAll(string strCell){sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeTop].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeBottom].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeLeft].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeRight].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlInsideHorizontal].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlInsideVertical].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strCell, mValue).Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;}/**//// <summary>/// 設置連續區域的邊框:上下左右都為黑色連續邊框/// </summary>/// <param name="strStartCell">開始單元格標識符</param>/// <param name="strEndCell">結束單元格標識符</param>public void SetBorderAll(string strStartCell, string strEndCell){sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeTop].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeBottom].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeLeft].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeRight].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlInsideHorizontal].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlInsideVertical].Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightGray);sheet.get_Range(strStartCell, strEndCell).Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;}/**//// <summary>/// 設置單元格或連續區域水平居左/// </summary>/// <param name="strCell">單元格標識符</param>public void SetHAlignLeft(string strCell){sheet.get_Range(strCell, mValue).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;}/**//// <summary>/// 設置連續區域水平居左/// </summary>/// <param name="strStartCell">開始單元格標識符</param>/// <param name="strEndCell">結束單元格標識符</param>public void SetHAlignLeft(string strStartCell, string strEndCell){sheet.get_Range(strStartCell, strEndCell).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;}/**//// <summary>/// 設置單元格或連續區域水平居左/// </summary>/// <param name="strCell">單元格標識符</param>public void SetHAlignCenter(string strCell){sheet.get_Range(strCell, mValue).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;}/**//// <summary>/// 設置連續區域水平居中/// </summary>/// <param name="strStartCell">開始單元格標識符</param>/// <param name="strEndCell">結束單元格標識符</param>public void SetHAlignCenter(string strStartCell, string strEndCell){sheet.get_Range(strStartCell, strEndCell).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;}/**//// <summary>/// 設置單元格或連續區域水平居右/// </summary>/// <param name="strCell">單元格標識符</param>public void SetHAlignRight(string strCell){sheet.get_Range(strCell, mValue).HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;}/**//// <summary>/// 設置連續區域水平居右/// </summary>/// <param name="strStartCell">開始單元格標識符</param>/// <param name="strEndCell">結束單元格標識符</param>public void SetHAlignRight(string strStartCell, string strEndCell){sheet.get_Range(strStartCell, strEndCell).HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;}/**//// <summary>/// 設置單元格或連續區域的顯示格式/// </summary>/// <param name="strCell">單元格標識符</param>/// <param name="strNF">如"#,##0.00"的顯示格式</param>public void SetNumberFormat(string strCell, string strNF){sheet.get_Range(strCell, mValue).NumberFormat = strNF;}/**//// <summary>/// 設置連續區域的顯示格式/// </summary>/// <param name="strStartCell">開始單元格標識符</param>/// <param name="strEndCell">結束單元格標識符</param>/// <param name="strNF">如"#,##0.00"的顯示格式</param>public void SetNumberFormat(string strStartCell, string strEndCell, string strNF){sheet.get_Range(strStartCell, strEndCell).NumberFormat = strNF;}/**//// <summary>/// 設置單元格或連續區域的字體大小/// </summary>/// <param name="strCell">單元格或連續區域標識符</param>/// <param name="intFontSize"></param>public void SetFontSize(string strCell, int intFontSize){sheet.get_Range(strCell, mValue).Font.Size = intFontSize.ToString();}/**//// <summary>/// 設置連續區域的字體大小/// </summary>/// <param name="strStartCell">開始單元格標識符</param>/// <param name="strEndCell">結束單元格標識符</param>/// <param name="intFontSize">字體大小</param>public void SetFontSize(string strStartCell, string strEndCell, int intFontSize){sheet.get_Range(strStartCell, strEndCell).Font.Size = intFontSize.ToString();}/**//// <summary>/// 設置列寬/// </summary>/// <param name="strColID">列標識,如A代表第一列</param>/// <param name="decWidth">寬度</param>public void SetColumnWidth(string strColID, double dblWidth){((Excel.Range)sheet.Columns.GetType().InvokeMember("Item", System.Reflection.BindingFlags.GetProperty, null, sheet.Columns, new object[] { (strColID + ":" + strColID).ToString() })).ColumnWidth = dblWidth;}/**//// <summary>/// 為單元格添加超級鏈接/// </summary>/// <param name="strCell">單元格標識符</param>/// <param name="strAddress">鏈接地址</param>/// <param name="strTip">屏幕提示</param>/// <param name="strText">鏈接文本</param>public void AddHyperLink(string strCell, string strAddress, string strTip, string strText){sheet.Hyperlinks.Add(sheet.get_Range(strCell, mValue), strAddress, mValue, strTip, strText);}/**//// <summary>/// 已知開始的單元格標識,求intR行、intColumn列后的單元格標識/// </summary>/// <param name="strStartCell">開始單元格標識</param>/// <param name="intR">行數</param>/// <param name="intC">列數</param>/// <returns>單元格標識符結果</returns>public string GetEndCell(string strStartCell, int intR, int intC){string endcell = string.Empty;System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^(?<vLetter>[A-Z]+)(?<vNumber>\d+)");if (regex.IsMatch(strStartCell)){endcell = this.NtoL(this.LtoN(regex.Match(strStartCell).Result("${vLetter}")) + intC) + System.Convert.ToString((System.Convert.ToInt32(regex.Match(strStartCell).Result("${vNumber}")) + intR));}return endcell;}/**//// <summary>/// 獲取單元格標識符中的字母/// </summary>/// <param name="strCell">單元格標識符</param>/// <returns>單元格標識符對應的字母</returns>public string GetCellLetter(string strCell){System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^(?<vLetter>[A-Z]+)(?<vNumber>\d+)");return regex.Match(strCell).Result("${vLetter}");}/**//// <summary>/// 獲取單元格標識符中的數字/// </summary>/// <param name="strCell">單元格標識符</param>public int GetCellNumber(string strCell){System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^(?<vLetter>[A-Z]+)(?<vNumber>\d+)");return System.Convert.ToInt32(regex.Match(strCell).Result("${vNumber}"));}/**//// <summary>/// 另存為xls文件/// </summary>/// <param name="strFilePath">文件路徑</param>public void SaveAs(string strFilePath){workbook.SaveCopyAs(strFilePath);}/**//// <summary>/// 另存為xls文件/// </summary>/// <param name="strFilePath">文件路徑</param>public void Save(){workbook.Save();}/// <summary>/// 將Excel中的數據 讀入DataTable中/// </summary>/// <param name="filePath">excel文件的路徑</param>/// <param name="dtName">datatable的名字</param>/// <param name="headName">表頭,以逗號分隔</param>/// <returns></returns>public DataTable ReadExcel2DataTable(string filePath, string dtName, string headName){workbook = this.appExcel.Workbooks.Open(filePath, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue, mValue);sheet = workbook.Worksheets.get_Item(1);DataTable dt = new DataTable(dtName);string[] heads = !string.IsNullOrEmpty(headName) ? headName.Split(',') : null;if (heads != null){for (int i = 0; i < heads.Length; i++){DataColumn column = new DataColumn(heads[i]);//這里沒對類型 進行處理dt.Columns.Add(column);}for (int i = 0; i <= sheet.UsedRange.Rows.Count; i++){DataRow dr = dt.NewRow();for (int j = 0; j < heads.Length; j++){string cellString = NtoL(j + 1);dr[heads[j]] = sheet.get_Range(cellString + (i + 1)).Value2;}dt.Rows.Add(dr);}}else{for (int i = 0; i <= sheet.UsedRange.Rows.Count; i++){DataRow dr = dt.NewRow();for (int j = 0; j <= sheet.UsedRange.Columns.Count; j++){dr[j + 1] = sheet.get_Range(NtoL(j + 1) + (i + 1)).Value2;}dt.Rows.Add(dr);}}return dt;}/**//// <summary>/// 另存為html文件/// </summary>/// <param name="strFilePath">文件路徑</param>public void SaveHtml(string strFilePath){workbook.SaveAs(strFilePath, Excel.XlFileFormat.xlHtml, mValue, mValue, mValue, mValue, Excel.XlSaveAsAccessMode.xlNoChange, mValue, mValue, mValue, mValue, mValue);}public void CreateHtmlFile(){}/**//// <summary>/// 字母轉換為數字,Excel列頭,如A-1;AA-27/// </summary>/// <param name="strLetter">字母</param>/// <returns>字母對應的數字</returns>private int LtoN(string strLetter){int intRtn = 0;string strLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";if (strLetter.Length == 2)intRtn += (strLetters.IndexOf(strLetter.Substring(0, 1)) + 1) * 26;intRtn += strLetters.IndexOf(strLetter.Substring(strLetter.Length - 1, 1)) + 1;return intRtn;}/**//// <summary>/// 數字轉換為字母,Excel列頭,如1-A;27-AA/// </summary>/// <param name="intNumber">數字</param>/// <returns>數字對應的字母</returns>private string NtoL(int intNumber){if (intNumber > 702)return String.Empty;if (intNumber == 702)return "ZZ";string strRtn = String.Empty;string strLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";if (intNumber > 26)strRtn = strLetters.Substring(intNumber / 26 - 1, 1);strRtn += strLetters.Substring((intNumber % 26) - 1, 1);return strRtn;}} }

參考:http://www.cnblogs.com/waxdoll/archive/2005/10/28/264071.html

DataTable導入Excel

Excel讀入DataTable

這里未對類型進行處理,datetime類型的數據會轉換成數值類型的

方案三

將Excel數據表當作數據源,通過?OleDb來實現。

同樣需要引入Microsoft Excel 14.0 Object Library

?分享一個操作類:

1 using System;2 using System.Collections;3 using System.Collections.Generic;4 using System.Data;5 using System.Data.OleDb;6 using System.IO;7 using System.Linq;8 using System.Text;9 using System.Threading.Tasks;10 using System.Web;11 using System.Web.UI;12 using System.Web.UI.WebControls;13 14 namespace Wolfy.Common15 {16 class OleDbExcelHelper17 {18 #region 數據導出至Excel文件19 /// </summary> 20 /// 導出Excel文件,自動返回可下載的文件流 21 /// </summary> 22 public static void DataTable1Excel(System.Data.DataTable dtData)23 {24 GridView gvExport = null;25 HttpContext curContext = HttpContext.Current;26 StringWriter strWriter = null;27 HtmlTextWriter htmlWriter = null;28 if (dtData != null)29 {30 curContext.Response.ContentType = "application/vnd.ms-excel";31 curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");32 curContext.Response.Charset = "utf-8";33 strWriter = new StringWriter();34 htmlWriter = new HtmlTextWriter(strWriter);35 gvExport = new GridView();36 gvExport.DataSource = dtData.DefaultView;37 gvExport.AllowPaging = false;38 gvExport.DataBind();39 gvExport.RenderControl(htmlWriter);40 curContext.Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=gb2312\"/>" + strWriter.ToString());41 curContext.Response.End();42 }43 }44 45 /// <summary>46 /// 導出Excel文件,轉換為可讀模式47 /// </summary>48 public static void DataTable2Excel(System.Data.DataTable dtData)49 {50 DataGrid dgExport = null;51 HttpContext curContext = HttpContext.Current;52 StringWriter strWriter = null;53 HtmlTextWriter htmlWriter = null;54 55 if (dtData != null)56 {57 curContext.Response.ContentType = "application/vnd.ms-excel";58 curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;59 curContext.Response.Charset = "";60 strWriter = new StringWriter();61 htmlWriter = new HtmlTextWriter(strWriter);62 dgExport = new DataGrid();63 dgExport.DataSource = dtData.DefaultView;64 dgExport.AllowPaging = false;65 dgExport.DataBind();66 dgExport.RenderControl(htmlWriter);67 curContext.Response.Write(strWriter.ToString());68 curContext.Response.End();69 }70 }71 72 /// <summary>73 /// 導出Excel文件,并自定義文件名74 /// </summary>75 public static void DataTable3Excel(System.Data.DataTable dtData, String FileName)76 {77 GridView dgExport = null;78 HttpContext curContext = HttpContext.Current;79 StringWriter strWriter = null;80 HtmlTextWriter htmlWriter = null;81 82 if (dtData != null)83 {84 HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8);85 curContext.Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");86 curContext.Response.ContentType = "application nd.ms-excel";87 curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;88 curContext.Response.Charset = "GB2312";89 strWriter = new StringWriter();90 htmlWriter = new HtmlTextWriter(strWriter);91 dgExport = new GridView();92 dgExport.DataSource = dtData.DefaultView;93 dgExport.AllowPaging = false;94 dgExport.DataBind();95 dgExport.RenderControl(htmlWriter);96 curContext.Response.Write(strWriter.ToString());97 curContext.Response.End();98 }99 } 100 101 /// <summary> 102 /// 將數據導出至Excel文件 103 /// </summary> 104 /// <param name="Table">DataTable對象</param> 105 /// <param name="ExcelFilePath">Excel文件路徑</param> 106 public static bool OutputToExcel(System.Data.DataTable Table, string ExcelFilePath) 107 { 108 if (File.Exists(ExcelFilePath)) 109 { 110 throw new Exception("該文件已經存在!"); 111 } 112 113 if ((Table.TableName.Trim().Length == 0) || (Table.TableName.ToLower() == "table")) 114 { 115 Table.TableName = "Sheet1"; 116 } 117 118 //數據表的列數 119 int ColCount = Table.Columns.Count; 120 121 //用于記數,實例化參數時的序號 122 int i = 0; 123 124 //創建參數 125 OleDbParameter[] para = new OleDbParameter[ColCount]; 126 127 //創建表結構的SQL語句 128 string TableStructStr = @"Create Table " + Table.TableName + "("; 129 130 //連接字符串 131 string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended Properties=Excel 8.0;"; 132 OleDbConnection objConn = new OleDbConnection(connString); 133 134 //創建表結構 135 OleDbCommand objCmd = new OleDbCommand(); 136 137 //數據類型集合 138 ArrayList DataTypeList = new ArrayList(); 139 DataTypeList.Add("System.Decimal"); 140 DataTypeList.Add("System.Double"); 141 DataTypeList.Add("System.Int16"); 142 DataTypeList.Add("System.Int32"); 143 DataTypeList.Add("System.Int64"); 144 DataTypeList.Add("System.Single"); 145 146 //遍歷數據表的所有列,用于創建表結構 147 foreach (DataColumn col in Table.Columns) 148 { 149 //如果列屬于數字列,則設置該列的數據類型為double 150 if (DataTypeList.IndexOf(col.DataType.ToString()) >= 0) 151 { 152 para[i] = new OleDbParameter("@" + col.ColumnName, OleDbType.Double); 153 objCmd.Parameters.Add(para[i]); 154 155 //如果是最后一列 156 if (i + 1 == ColCount) 157 { 158 TableStructStr += col.ColumnName + " double)"; 159 } 160 else 161 { 162 TableStructStr += col.ColumnName + " double,"; 163 } 164 } 165 else 166 { 167 para[i] = new OleDbParameter("@" + col.ColumnName, OleDbType.VarChar); 168 objCmd.Parameters.Add(para[i]); 169 170 //如果是最后一列 171 if (i + 1 == ColCount) 172 { 173 TableStructStr += col.ColumnName + " varchar)"; 174 } 175 else 176 { 177 TableStructStr += col.ColumnName + " varchar,"; 178 } 179 } 180 i++; 181 } 182 183 //創建Excel文件及文件結構 184 try 185 { 186 objCmd.Connection = objConn; 187 objCmd.CommandText = TableStructStr; 188 189 if (objConn.State == ConnectionState.Closed) 190 { 191 objConn.Open(); 192 } 193 objCmd.ExecuteNonQuery(); 194 } 195 catch (Exception exp) 196 { 197 throw exp; 198 } 199 200 //插入記錄的SQL語句 201 string InsertSql_1 = "Insert into " + Table.TableName + " ("; 202 string InsertSql_2 = " Values ("; 203 string InsertSql = ""; 204 205 //遍歷所有列,用于插入記錄,在此創建插入記錄的SQL語句 206 for (int colID = 0; colID < ColCount; colID++) 207 { 208 if (colID + 1 == ColCount) //最后一列 209 { 210 InsertSql_1 += Table.Columns[colID].ColumnName + ")"; 211 InsertSql_2 += "@" + Table.Columns[colID].ColumnName + ")"; 212 } 213 else 214 { 215 InsertSql_1 += Table.Columns[colID].ColumnName + ","; 216 InsertSql_2 += "@" + Table.Columns[colID].ColumnName + ","; 217 } 218 } 219 220 InsertSql = InsertSql_1 + InsertSql_2; 221 222 //遍歷數據表的所有數據行 223 for (int rowID = 0; rowID < Table.Rows.Count; rowID++) 224 { 225 for (int colID = 0; colID < ColCount; colID++) 226 { 227 if (para[colID].DbType == DbType.Double && Table.Rows[rowID][colID].ToString().Trim() == "") 228 { 229 para[colID].Value = 0; 230 } 231 else 232 { 233 para[colID].Value = Table.Rows[rowID][colID].ToString().Trim(); 234 } 235 } 236 try 237 { 238 objCmd.CommandText = InsertSql; 239 objCmd.ExecuteNonQuery(); 240 } 241 catch (Exception exp) 242 { 243 string str = exp.Message; 244 } 245 } 246 try 247 { 248 if (objConn.State == ConnectionState.Open) 249 { 250 objConn.Close(); 251 } 252 } 253 catch (Exception exp) 254 { 255 throw exp; 256 } 257 return true; 258 } 259 260 /// <summary> 261 /// 將數據導出至Excel文件 262 /// </summary> 263 /// <param name="Table">DataTable對象</param> 264 /// <param name="Columns">要導出的數據列集合</param> 265 /// <param name="ExcelFilePath">Excel文件路徑</param> 266 public static bool OutputToExcel(System.Data.DataTable Table, ArrayList Columns, string ExcelFilePath) 267 { 268 if (File.Exists(ExcelFilePath)) 269 { 270 throw new Exception("該文件已經存在!"); 271 } 272 273 //如果數據列數大于表的列數,取數據表的所有列 274 if (Columns.Count > Table.Columns.Count) 275 { 276 for (int s = Table.Columns.Count + 1; s <= Columns.Count; s++) 277 { 278 Columns.RemoveAt(s); //移除數據表列數后的所有列 279 } 280 } 281 282 //遍歷所有的數據列,如果有數據列的數據類型不是 DataColumn,則將它移除 283 DataColumn column = new DataColumn(); 284 for (int j = 0; j < Columns.Count; j++) 285 { 286 try 287 { 288 column = (DataColumn)Columns[j]; 289 } 290 catch (Exception) 291 { 292 Columns.RemoveAt(j); 293 } 294 } 295 if ((Table.TableName.Trim().Length == 0) || (Table.TableName.ToLower() == "table")) 296 { 297 Table.TableName = "Sheet1"; 298 } 299 300 //數據表的列數 301 int ColCount = Columns.Count; 302 303 //創建參數 304 OleDbParameter[] para = new OleDbParameter[ColCount]; 305 306 //創建表結構的SQL語句 307 string TableStructStr = @"Create Table " + Table.TableName + "("; 308 309 //連接字符串 310 string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended Properties=Excel 8.0;"; 311 OleDbConnection objConn = new OleDbConnection(connString); 312 313 //創建表結構 314 OleDbCommand objCmd = new OleDbCommand(); 315 316 //數據類型集合 317 ArrayList DataTypeList = new ArrayList(); 318 DataTypeList.Add("System.Decimal"); 319 DataTypeList.Add("System.Double"); 320 DataTypeList.Add("System.Int16"); 321 DataTypeList.Add("System.Int32"); 322 DataTypeList.Add("System.Int64"); 323 DataTypeList.Add("System.Single"); 324 325 DataColumn col = new DataColumn(); 326 327 //遍歷數據表的所有列,用于創建表結構 328 for (int k = 0; k < ColCount; k++) 329 { 330 col = (DataColumn)Columns[k]; 331 332 //列的數據類型是數字型 333 if (DataTypeList.IndexOf(col.DataType.ToString().Trim()) >= 0) 334 { 335 para[k] = new OleDbParameter("@" + col.Caption.Trim(), OleDbType.Double); 336 objCmd.Parameters.Add(para[k]); 337 338 //如果是最后一列 339 if (k + 1 == ColCount) 340 { 341 TableStructStr += col.Caption.Trim() + " Double)"; 342 } 343 else 344 { 345 TableStructStr += col.Caption.Trim() + " Double,"; 346 } 347 } 348 else 349 { 350 para[k] = new OleDbParameter("@" + col.Caption.Trim(), OleDbType.VarChar); 351 objCmd.Parameters.Add(para[k]); 352 353 //如果是最后一列 354 if (k + 1 == ColCount) 355 { 356 TableStructStr += col.Caption.Trim() + " VarChar)"; 357 } 358 else 359 { 360 TableStructStr += col.Caption.Trim() + " VarChar,"; 361 } 362 } 363 } 364 365 //創建Excel文件及文件結構 366 try 367 { 368 objCmd.Connection = objConn; 369 objCmd.CommandText = TableStructStr; 370 371 if (objConn.State == ConnectionState.Closed) 372 { 373 objConn.Open(); 374 } 375 objCmd.ExecuteNonQuery(); 376 } 377 catch (Exception exp) 378 { 379 throw exp; 380 } 381 382 //插入記錄的SQL語句 383 string InsertSql_1 = "Insert into " + Table.TableName + " ("; 384 string InsertSql_2 = " Values ("; 385 string InsertSql = ""; 386 387 //遍歷所有列,用于插入記錄,在此創建插入記錄的SQL語句 388 for (int colID = 0; colID < ColCount; colID++) 389 { 390 if (colID + 1 == ColCount) //最后一列 391 { 392 InsertSql_1 += Columns[colID].ToString().Trim() + ")"; 393 InsertSql_2 += "@" + Columns[colID].ToString().Trim() + ")"; 394 } 395 else 396 { 397 InsertSql_1 += Columns[colID].ToString().Trim() + ","; 398 InsertSql_2 += "@" + Columns[colID].ToString().Trim() + ","; 399 } 400 } 401 402 InsertSql = InsertSql_1 + InsertSql_2; 403 404 //遍歷數據表的所有數據行 405 DataColumn DataCol = new DataColumn(); 406 for (int rowID = 0; rowID < Table.Rows.Count; rowID++) 407 { 408 for (int colID = 0; colID < ColCount; colID++) 409 { 410 //因為列不連續,所以在取得單元格時不能用行列編號,列需得用列的名稱 411 DataCol = (DataColumn)Columns[colID]; 412 if (para[colID].DbType == DbType.Double && Table.Rows[rowID][DataCol.Caption].ToString().Trim() == "") 413 { 414 para[colID].Value = 0; 415 } 416 else 417 { 418 para[colID].Value = Table.Rows[rowID][DataCol.Caption].ToString().Trim(); 419 } 420 } 421 try 422 { 423 objCmd.CommandText = InsertSql; 424 objCmd.ExecuteNonQuery(); 425 } 426 catch (Exception exp) 427 { 428 string str = exp.Message; 429 } 430 } 431 try 432 { 433 if (objConn.State == ConnectionState.Open) 434 { 435 objConn.Close(); 436 } 437 } 438 catch (Exception exp) 439 { 440 throw exp; 441 } 442 return true; 443 } 444 #endregion 445 446 /// <summary> 447 /// 獲取Excel文件數據表列表 448 /// </summary> 449 public static ArrayList GetExcelTables(string ExcelFileName) 450 { 451 System.Data.DataTable dt = new System.Data.DataTable(); 452 ArrayList TablesList = new ArrayList(); 453 if (File.Exists(ExcelFileName)) 454 { 455 using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + ExcelFileName)) 456 { 457 try 458 { 459 conn.Open(); 460 dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 461 } 462 catch (Exception exp) 463 { 464 throw exp; 465 } 466 467 //獲取數據表個數 468 int tablecount = dt.Rows.Count; 469 for (int i = 0; i < tablecount; i++) 470 { 471 string tablename = dt.Rows[i][2].ToString().Trim().TrimEnd('$'); 472 if (TablesList.IndexOf(tablename) < 0) 473 { 474 TablesList.Add(tablename); 475 } 476 } 477 } 478 } 479 return TablesList; 480 } 481 482 /// <summary> 483 /// 將Excel文件導出至DataTable(第一行作為表頭) 484 /// </summary> 485 /// <param name="ExcelFilePath">Excel文件路徑</param> 486 /// <param name="TableName">數據表名,如果數據表名錯誤,默認為第一個數據表名</param> 487 public static DataTable InputFromExcel(string ExcelFilePath, string TableName) 488 { 489 if (!File.Exists(ExcelFilePath)) 490 { 491 throw new Exception("Excel文件不存在!"); 492 } 493 494 //如果數據表名不存在,則數據表名為Excel文件的第一個數據表 495 ArrayList TableList = new ArrayList(); 496 TableList = GetExcelTables(ExcelFilePath); 497 498 if (TableName.IndexOf(TableName) < 0) 499 { 500 TableName = TableList[0].ToString().Trim(); 501 } 502 503 DataTable table = new DataTable(); 504 OleDbConnection dbcon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended Properties=Excel 8.0"); 505 OleDbCommand cmd = new OleDbCommand("select * from [" + TableName + "$]", dbcon); 506 OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); 507 508 try 509 { 510 if (dbcon.State == ConnectionState.Closed) 511 { 512 dbcon.Open(); 513 } 514 adapter.Fill(table); 515 } 516 catch (Exception exp) 517 { 518 throw exp; 519 } 520 finally 521 { 522 if (dbcon.State == ConnectionState.Open) 523 { 524 dbcon.Close(); 525 } 526 } 527 return table; 528 } 529 530 /// <summary> 531 /// 獲取Excel文件指定數據表的數據列表 532 /// </summary> 533 /// <param name="ExcelFileName">Excel文件名</param> 534 /// <param name="TableName">數據表名</param> 535 public static ArrayList GetExcelTableColumns(string ExcelFileName, string TableName) 536 { 537 DataTable dt = new DataTable(); 538 ArrayList ColsList = new ArrayList(); 539 if (File.Exists(ExcelFileName)) 540 { 541 using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" + ExcelFileName)) 542 { 543 conn.Open(); 544 dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, TableName, null }); 545 546 //獲取列個數 547 int colcount = dt.Rows.Count; 548 for (int i = 0; i < colcount; i++) 549 { 550 string colname = dt.Rows[i]["Column_Name"].ToString().Trim(); 551 ColsList.Add(colname); 552 } 553 } 554 } 555 return ColsList; 556 } 557 } 558 }

網上搜集的常用類,這里不再測試。

方案四

將Excel另存為xml文件,對xml文件進行操作。

1 <Row>2 <Cell><Data ss:Type="String">998</Data></Cell>3 <Cell><Data ss:Type="String">柳雪巧</Data></Cell>4 <Cell><Data ss:Type="String">f</Data></Cell>5 <Cell><Data ss:Type="String">1971/4/30 0:00:00</Data></Cell>6 <Cell><Data ss:Type="String">2005/1/15 0:00:00</Data></Cell>7 <Cell><Data ss:Type="String">臺灣省 屏東縣</Data></Cell>8 <Cell><Data ss:Type="String">Dolores19710430@139.com</Data></Cell>9 <Cell><Data ss:Type="String">12616310511</Data></Cell> 10 <Cell><Data ss:Type="String">False</Data></Cell> 11 <Cell><Data ss:Type="String">2014/3/15 10:13:54</Data></Cell> 12 <Cell><Data ss:Type="String">5</Data></Cell> 13 </Row>

excel表格中每一行數據,其實是以上格式的xml,有規律,就可以很容易的去解析。

方案五

?js插件

官網地址:http://datatables.net/extras/tabletools/

?

方案六

導出為csv文件

分享一個輔助類

1 using System.Data;2 using System.IO;3 4 public static class CsvHelper5 {6 /// <summary>7 /// 導出報表為Csv8 /// </summary>9 /// <param name="dt">DataTable</param> 10 /// <param name="strFilePath">物理路徑</param> 11 /// <param name="tableheader">表頭</param> 12 /// <param name="columname">字段標題,逗號分隔</param> 13 public static bool dt2csv(DataTable dt, string strFilePath, string tableheader, string columname) 14 { 15 try 16 { 17 string strBufferLine = ""; 18 StreamWriter strmWriterObj = new StreamWriter(strFilePath,false,System.Text.Encoding.UTF8); 19 strmWriterObj.WriteLine(tableheader); 20 strmWriterObj.WriteLine(columname); 21 for (int i = 0; i < dt.Rows.Count; i++) 22 { 23 strBufferLine = ""; 24 for (int j = 0; j < dt.Columns.Count; j++) 25 { 26 if (j > 0) 27 strBufferLine += ","; 28 strBufferLine += dt.Rows[i][j].ToString(); 29 } 30 strmWriterObj.WriteLine(strBufferLine); 31 } 32 strmWriterObj.Close(); 33 return true; 34 } 35 catch 36 { 37 return false; 38 } 39 } 40 41 /// <summary> 42 /// 將Csv讀入DataTable 43 /// </summary> 44 /// <param name="filePath">csv文件路徑</param> 45 /// <param name="n">表示第n行是字段title,第n+1行是記錄開始</param> 46 public static DataTable csv2dt(string filePath, int n, DataTable dt) 47 { 48 StreamReader reader = new StreamReader(filePath, System.Text.Encoding.UTF8, false); 49 int i = 0, m = 0; 50 reader.Peek(); 51 while (reader.Peek() > 0) 52 { 53 m = m + 1; 54 string str = reader.ReadLine(); 55 if (m >= n + 1) 56 { 57 string[] split = str.Split(','); 58 59 System.Data.DataRow dr = dt.NewRow(); 60 for (i = 0; i < split.Length; i++) 61 { 62 dr[i] = split[i]; 63 } 64 dt.Rows.Add(dr); 65 } 66 } 67 return dt; 68 } 69 }

不再測試。

方案七

使用模版的方式,最簡單的模版,就是將表頭列出,然后再導入數據。第一行為表頭,從第二行開始寫入數據。導入過程可參考前面的解決方案。

方案八

使用Aspose.Cells組件,貌似收費。

可參考:http://www.cnblogs.com/lanyue52011/p/3372452.html

http://www.cnblogs.com/hongjiumu/archive/2013/03/15/2962277.html

http://www.cnblogs.com/wujy/archive/2012/07/19/2600162.html

方案九

OpenXML

?OpenXML庫:DocumentFormat.OpenXml.dll;

?參考:http://www.cnblogs.com/zlgcool/archive/2008/12/31/1365993.html

http://blog.sina.com.cn/s/blog_46e9573c01011bvs.html

總結

列出常見的幾種解決方案,在實際項目中,用哪一種,還是根據項目環境來決定吧。

最近項目中用到了Excel導出,導入的功能,就想著將常見的方式總結一下。也許還有遺漏,請留言,將你知道也分享給大家,謝謝。

如果該文章對你有所幫助,不妨推薦一下,讓更多的人知道,畢竟分享是件快樂的事情。

代碼下載:鏈接:http://pan.baidu.com/s/1dD3lleT?密碼:axli

總結

以上是生活随笔為你收集整理的转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久歪歪 | 伊人婷婷网 | 日韩字幕在线 | 久久亚洲免费视频 | 亚洲国产精品久久久久婷婷884 | 国产精品精品久久久久久 | 免费看毛片在线 | 成人国产精品一区 | 欧美另类高清 videos | 久久av高清 | 国产99久久久精品 | 久久精品一区八戒影视 | 三级午夜片| 国产中文字幕在线看 | 日本韩国欧美在线观看 | 97精品国产91久久久久久久 | 欧洲高潮三级做爰 | 久久视频精品在线观看 | 久草在线免费资源站 | 免费看久久 | 久久人人爽人人爽人人 | 色播亚洲婷婷 | 国产成人一区二区三区在线观看 | 激情婷婷网 | 亚洲在线视频观看 | 国产精品99久久久久人中文网介绍 | 亚洲视频中文 | 日韩免费在线观看网站 | 网站免费黄 | 国产99久久久国产精品 | 色视频在线 | 天天操天天干天天操天天干 | 91av99| 中文字幕在线观看的网站 | 在线观看视频h | 国产亚洲精品久久久久动 | 久久久亚洲国产精品麻豆综合天堂 | 少妇bbbb搡bbbb桶 | 久久精彩视频 | 国产精品av免费观看 | 69av在线视频| 91正在播放 | 日韩黄色一级电影 | 97视频网址| 一区二区激情视频 | 国产在线不卡精品 | 精品女同一区二区三区在线观看 | 狠狠色综合网站久久久久久久 | 九色琪琪久久综合网天天 | 超碰精品在线观看 | 狠狠狠狠狠狠干 | 天天操天天干天天操天天干 | 色婷婷亚洲精品 | 黄色免费视频在线观看 | 国产尤物视频在线 | 久草观看 | 国产黄色大全 | 91成年人在线观看 | 韩国av不卡 | 欧美最猛性xxxxx亚洲精品 | 在线a亚洲视频播放在线观看 | 欧美伦理一区 | 一级一片免费视频 | 四虎影视8848dvd | 中文字幕在线一区二区三区 | 91系列在线观看 | 国产剧情av在线播放 | 99久久这里有精品 | 精品久久免费看 | 婷婷丁香九月 | 国产黄色片免费 | 久久爱资源网 | av丁香花| 91精品国自产在线 | 高清久久久 | 久久久久电影网站 | av丝袜在线 | 欧美一区二区在线 | 叶爱av在线| 久艹在线播放 | 国产资源网站 | 久草免费在线观看视频 | 久久在视频 | 国产精品theporn | 在线观看va | 精品国产电影一区 | 亚洲少妇xxxx | 日韩视频欧美视频 | 午夜av一区二区三区 | 日韩经典一区二区三区 | 久草在线久 | 97免费视频在线 | 在线观看国产v片 | 国产精品乱码高清在线看 | 国产精品久久久久久影院 | 国产黑丝一区二区三区 | 大片网站久久 | 日韩欧美精品在线 | 久久永久视频 | 久久网站av | 99久久电影 | 亚洲 欧美 综合 在线 精品 | 亚洲成人黄 | 国产精品久久久久av | 国产精品福利视频 | 国产99在线免费 | 伊人久操| 99热精品视 | www好男人| 亚洲精品乱码久久久久久写真 | 国产中文字幕三区 | 色网免费观看 | 亚洲国产中文字幕 | 青草视频网 | 精品一区二区三区久久久 | 国产剧情在线一区 | 亚洲另类在线视频 | 国产原创在线观看 | 777xxx欧美| 国产精品综合av一区二区国产馆 | 成人av免费在线 | 国产精品久久伊人 | 中国美女一级看片 | 色婷婷国产精品一区在线观看 | 日韩中文字幕免费视频 | 国产视频在线看 | 国产精品久久久久久久久大全 | 91在线精品观看 | 国产成人精品一区二区三区福利 | 免费观看av网站 | 91精品视频一区二区三区 | 国产一区视频在线 | 亚洲理论在线观看 | 欧美成人h版 | 久久伦理电影 | 国产精品国产三级在线专区 | av在线亚洲天堂 | 九九九毛片| 伊人五月综合 | 在线午夜 | 97视频免费播放 | 亚洲成人精品在线 | 久草在线资源免费 | 久99精品| 97成人免费 | 成人黄色大片在线观看 | 日日夜夜av| www.玖玖玖 | 日韩v欧美v日本v亚洲v国产v | 精品麻豆入口免费 | 欧美做受69 | 97香蕉久久国产在线观看 | 天天干天天干天天 | 99精品一区| 日韩免费福利 | 最新av在线播放 | 人人玩人人弄 | 亚洲成免费 | 婷婷深爱网 | 国产 视频 高清 免费 | 五月激情久久 | 91视频链接| 成人在线视频网 | 国产一级二级三级在线观看 | 成人在线免费视频观看 | 久久久鲁| 中国黄色一级大片 | 韩国av一区 | 久久人91精品久久久久久不卡 | 国产视频在线观看一区 | 99热国产精品 | 美腿丝袜av | av在线h| 免费a网址| 97视频在线看| 午夜久操 | 久热av在线 | 亚洲蜜桃在线 | 天天干,天天草 | 一区二区三区四区不卡 | 国产精品久久久久久久久久免费 | www.五月天色| 香蕉一区| 久 久久影院| 色综合久久久久综合99 | 天天伊人狠狠 | 国产一区二区综合 | 久久99视频免费 | 久久av中文字幕片 | 日本护士三级少妇三级999 | 国产在线观看网站 | 精品视频久久 | 欧美亚洲国产精品久久高清浪潮 | 曰韩精品 | 一区二区三区日韩精品 | 日韩色区 | av网站在线免费观看 | 久久久久久久久久久福利 | av成人黄色| 波多野结衣在线中文字幕 | 在线高清一区 | 国产精品一区久久久久 | 91亚洲精品久久久久图片蜜桃 | 国产成人一区二区三区免费看 | 中文在线字幕观看电影 | 日韩在线高清免费视频 | 黄色av成人在线观看 | 久久久精品99 | 久草香蕉在线 | 日韩福利在线观看 | 最新国产精品亚洲 | 欧美一级特黄aaaaaa大片在线观看 | 米奇四色影视 | 色先锋资源网 | 96久久久| 中文字幕免费高清在线 | 狠狠干夜夜操天天爽 | 欧美激情精品 | 激情综合色综合久久综合 | 黄色av网站在线观看免费 | 久久婷婷丁香 | 中文资源在线官网 | 伊人超碰在线 | 在线观看av网 | 国产精品美女久久久久久久久久久 | 丝袜美女在线 | 在线免费av播放 | 最新av网站在线观看 | 久久免费精品 | 国产精品一级在线 | 亚洲欧美一区二区三区孕妇写真 | 亚洲精品欧洲精品 | 99在线观看免费视频精品观看 | 久久九九久久精品 | 成人在线一区二区 | 在线播放日韩av | av黄色免费在线观看 | 99日韩精品 | 亚洲视屏| 日本不卡一区二区 | 亚洲精品视频在线观看网站 | 日韩a级黄色片 | 久久婷婷综合激情 | 中文字幕在线一区观看 | 在线视频免费观看 | 97激情影院 | 日韩精品在线一区 | 在线看中文字幕 | 国产精品igao视频网入口 | 久久精品一区二区 | 欧美久久久久久 | 狠狠干夜夜操天天爽 | 亚洲国产精品成人av | 亚洲视频在线播放 | 极品美女被弄高潮视频网站 | 久久免费一级片 | 日韩性色 | 日韩精品 在线视频 | 成年人在线电影 | 久久精品视频在线免费观看 | 国产精品一区二区62 | 综合久久精品 | 婷婷六月天丁香 | 亚洲国产999 | 国偷自产中文字幕亚洲手机在线 | 国产成人精品av | 手机av永久免费 | 欧美综合干 | 欧美一性一交一乱 | 在线中文字幕视频 | 国产美女网 | 在线观看视频一区二区 | 婷五月天激情 | 成人在线黄色电影 | 91精品久久香蕉国产线看观看 | 久久久久久97三级 | 日本99热 | 久久伊人综合 | 奇米网777 | 999国产精品视频 | 超级碰碰碰免费视频 | 久久久久久久久久电影 | 国产亚洲综合在线 | 正在播放亚洲精品 | av高清免费 | 一本一本久久a久久精品综合小说 | 99久久精品免费看国产 | 在线天堂视频 | 国产亚洲精品久久久久久 | 免费视频 三区 | 午夜精品视频一区 | 97超碰色 | 亚洲欧洲精品一区二区精品久久久 | 亚洲一区网 | 99爱这里只有精品 | 天天色中文 | 人人干免费 | 国产小视频在线免费观看视频 | 成年人视频在线免费观看 | av黄色国产 | 久久这里只有精品视频首页 | 五月婷婷狠狠 | 日韩a在线| 日韩视频免费看 | 综合天天色 | 久久久国产精品一区二区中文 | www.com.黄 | av综合站| 日韩最新理论电影 | 成人四虎影院 | 青青色影院 | 久久免费久久 | 中文av一区二区 | 五月天综合网站 | 国产丝袜在线 | 91精品国产99久久久久 | 日韩午夜电影 | 日本成人黄色片 | 人人干人人干人人干 | 在线国产视频观看 | 欧美国产日韩一区二区三区 | 国产精品毛片一区二区在线 | 日韩成人免费在线 | 欧美三级高清 | 天堂av最新网址 | 国产看片免费 | 久草在线资源视频 | 欧美日韩后 | 超碰在线个人 | 精品伊人久久久 | 国产精品久久久久久影院 | 国产免费av一区二区三区 | 91在线中文 | 国产成人精品一区二区三区福利 | 亚洲精品久久久蜜臀下载官网 | 波多野结衣一区 | 欧美日韩三区二区 | 国产精品美女毛片真酒店 | 久久综合婷婷综合 | 黄色av电影一级片 | 久久精品国产免费 | www.亚洲激情.com | 国产精品v欧美精品 | 免费a视频在线观看 | 91手机视频在线 | 日韩视频二区 | 国产91全国探花系列在线播放 | 精品av在线播放 | 91丨九色丨高潮丰满 | 叶爱av在线 | 九九热在线视频免费观看 | 国产免费一区二区三区网站免费 | 日日操夜 | 久久美女视频 | 欧美亚洲成人xxx | bbbbb女女女女女bbbbb国产 | 亚洲视频 一区 | 久草视频在线资源 | 精品国产一区二区三区日日嗨 | aav在线 | 久操免费视频 | 久久综合久久久久88 | 国产在线高清视频 | 国产精品网红福利 | 天天艹 | 亚洲区另类春色综合小说 | 成人理论在线观看 | 国产成人精品午夜在线播放 | 五月婷婷丁香综合 | 国产免费成人av | 狠狠的操你 | 久久老司机精品视频 | 婷婷成人亚洲综合国产xv88 | 又黄又爽的免费高潮视频 | 97视频网站 | 欧美在线视频二区 | 久久艹在线 | 久久精品久久久精品美女 | 久久视频这里只有精品 | 亚洲国产中文字幕 | 久久99视频 | 一二区精品 | 美女黄频在线观看 | www.激情五月.com | 91麻豆国产福利在线观看 | 欧美va天堂在线电影 | 久草视频在线播放 | 深爱开心激情网 | 综合色久 | 99精品福利视频 | 日韩成人在线一区二区 | 国产精品欧美久久久久久 | 97精品国产91久久久久久久 | 免费福利视频导航 | 亚洲精品乱码久久久久久蜜桃91 | 国产成人精品一区二三区 | 国产中文字幕免费 | 国产视频一区二区在线播放 | 国产精品99久久久久人中文网介绍 | 一区二区中文字幕在线观看 | 欧美日韩电影在线播放 | 日韩理论片在线观看 | 97超碰在线久草超碰在线观看 | 亚洲1区在线 | 成年人在线免费视频观看 | 欧美在线视频一区二区三区 | 欧美日韩在线电影 | 毛片1000部免费看 | 久久中文字幕导航 | 久久99亚洲网美利坚合众国 | 久久精品最新 | 在线播放 一区 | 中文字幕在线观看资源 | 免费网站v | 日韩欧美高清 | 狠狠狠狠狠狠狠狠干 | 国产日韩精品一区二区三区 | 久久综合影视 | 亚洲成人资源网 | 欧美黄色免费 | 精品久久久久一区二区国产 | 久草在线播放视频 | 久久久久久久国产精品视频 | 精品人人爽 | 成人国产精品av | 日韩精品中文字幕在线 | 五月天色综合 | 超碰在线最新网址 | 99热国产在线 | 国产亚洲人成网站在线观看 | 久久精品99久久久久久2456 | 国产精品久久久久国产精品日日 | 亚洲成人软件 | 精品久久久久久电影 | 国产中文欧美日韩在线 | 国产日产亚洲精华av | 色狠狠操 | 国产在线欧美 | 日日夜夜操操操操 | 中文字幕一区二区在线播放 | 美女网站久久 | 成人av一区二区在线观看 | 成人黄色在线看 | 日韩在线视频观看 | 国产人成免费视频 | 亚洲亚洲精品在线观看 | 免费看黄色毛片 | 一区二区中文字幕在线观看 | 久久男人中文字幕资源站 | 久久综合加勒比 | 免费看污污视频的网站 | 日韩视频一 | 在线观看视频黄色 | 狠狠色综合欧美激情 | 91精品国产福利 | 蜜桃视频在线观看一区 | 亚洲国产精品视频 | 精品国产乱码一区二区三区在线 | 国产精品久久久久久吹潮天美传媒 | 一区中文字幕在线观看 | 夜夜夜草 | 欧美日韩精品在线播放 | 国产高清视频在线播放一区 | 少妇搡bbbb搡bbb搡69 | 九九色综合 | 色婷婷中文 | 久久99网| 91在线超碰 | 黄色片网站 | 免费瑟瑟网站 | 国产精品嫩草影院123 | 五月天综合在线 | 在线看小早川怜子av | 天天射夜夜爽 | 国产精品美女久久久久久久网站 | 992tv在线观看网站 | 91香蕉视频黄 | 久久久久久电影 | 国产99久久久欧美黑人 | 国产精品色婷婷 | 国产小视频在线观看 | 久久国产系列 | 天天做日日做天天爽视频免费 | 日韩免费在线视频观看 | 在线观看福利网站 | 日韩中文字幕免费看 | av电影在线免费观看 | 亚洲国产小视频在线观看 | 亚洲精品视频一 | 国产视频精品视频 | 久草在线欧美 | 日韩在线网址 | 激情图片区 | 国产精品一区久久久久 | 免费看的黄网站 | 亚洲午夜久久久久久久久久久 | 99久久精品无码一区二区毛片 | 91chinesexxx| 在线成人免费av | www国产亚洲| 狠狠色丁香婷婷综合橹88 | 黄色免费大全 | 天天色天天操综合 | 狠狠色狠狠色综合日日小说 | 91精品在线麻豆 | 国产色在线视频 | www.久久色 | 在线 日韩 av | 欧美一级片在线播放 | 日韩免费观看高清 | 中字幕视频在线永久在线观看免费 | 国产亚洲视频在线 | 亚洲成a人片在线观看网站口工 | 亚洲欧美日韩不卡 | 伊人宗合| 午夜视频在线瓜伦 | 亚洲精品自拍 | 午夜在线免费观看视频 | 天天干天天操天天搞 | 国产字幕在线观看 | 亚洲一区av | 国产精品24小时在线观看 | 色婷婷av在线| 国产欧美综合在线观看 | 中文字幕 国产精品 | 午夜在线观看 | 婷婷丁香激情五月 | 久久夜色精品国产欧美乱极品 | 久久激情婷婷 | 伊人五月婷 | 色黄久久久久久 | 最新国产精品久久精品 | 91视频啊啊啊 | 久久精品亚洲一区二区三区观看模式 | 91大神一区二区三区 | 国产精品毛片久久 | 天天操天天舔天天干 | 日韩在线免费电影 | 日日夜夜精品网站 | 国产精品99久久免费黑人 | 中文字幕精品三级久久久 | 国产破处精品 | 精品亚洲网 | 伊人国产视频 | 免费电影一区二区三区 | 国产免费一区二区三区最新 | 日韩精品久久中文字幕 | 91在线一区| 色婷婷综合久久久 | 开心激情网五月天 | av五月婷婷 | 深夜免费网站 | 丁香久久综合 | 91九色综合| 天天操天天干天天综合网 | av网站免费线看精品 | 国产91电影在线观看 | www黄色软件 | 免费看黄色毛片 | 国产成人高清在线 | 91九色老 | 国产亚洲视频在线免费观看 | 日韩精品高清不卡 | 91久久黄色 | 亚洲h视频在线 | 最近中文字幕免费视频 | 久草在线手机观看 | www国产亚洲精品久久网站 | 日韩精品免费在线 | 久久99亚洲精品 | 一级黄网| a爱爱视频| 99精品视频一区二区 | 欧美色一色| 亚洲第一色 | 精品国产_亚洲人成在线 | 国产91精品一区二区麻豆网站 | 日韩美精品视频 | 欧美亚洲一级片 | 精品在线视频播放 | 九九精品在线观看 | 日韩二区三区 | 久久免费视频播放 | 去干成人网| 国产精品毛片一区视频 | 国产日韩高清在线 | 日本久久久久久久久久 | 九九综合久久 | 日韩精品一区电影 | 国产破处在线视频 | 国产精品视频免费观看 | 人人干天天射 | 日韩视频精品在线 | 国产在线观看国语版免费 | 亚洲第一色| 国产精品久久久久久999 | 亚洲精品白浆高清久久久久久 | 字幕网在线观看 | 国产精品网站一区二区三区 | 欧美一二区视频 | 成年美女黄网站色大片免费看 | 99色国产| 日日夜夜精品免费 | 叶爱av在线 | 六月丁香激情综合 | 少妇高潮冒白浆 | av免费看看| 国产精品女人久久久久久 | 欧美日韩国产欧美 | 欧美激情精品久久久久久免费 | 国产99视频在线观看 | 欧美日产在线观看 | 国产一线天在线观看 | 91成人免费在线 | 国产视频在线免费 | 国产91亚洲| 日韩av视屏| 免费看成人av | 在线网站黄 | 麻豆va一区二区三区久久浪 | 色婷婷狠 | 91色九色 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 91.麻豆视频 | 久久久久久久国产精品视频 | 五月天久久婷 | 日韩亚洲欧美中文字幕 | 免费观看日韩av | 亚洲欧美日本一区二区三区 | 成人免费网站在线观看 | 91精品国产91久久久久福利 | 欧美黄色特级片 | 亚洲黄色av网址 | 草免费视频 | 999久久久免费精品国产 | 日韩色综合 | 91污在线观看 | 成人香蕉视频 | 国产在线视频一区二区 | 精品国产一区二区三区噜噜噜 | 久久激情小视频 | 欧美激情精品久久久久 | 欧美午夜精品久久久久久孕妇 | 国产精品久久久久久久久久久久久久 | 国产在线一区二区 | 2021久久| 久久综合免费 | 国产涩涩在线观看 | 欧美日韩激情视频8区 | 欧美天天综合网 | 精品影院一区二区久久久 | 91视频免费网站 | 国产精品久久久久久久久久久免费看 | 久久刺激视频 | 久久久国际精品 | 国产成人免费 | 久久超级碰 | 久久成人国产精品 | 国产精品福利在线观看 | 久久国产精品小视频 | 操操操综合 | 久久国产经典 | 亚洲欧美视频网站 | 丁香激情视频 | 亚洲综合国产精品 | 免费91麻豆精品国产自产在线观看 | 国产精品av电影 | 一区二区三区久久 | 中文字幕综合在线 | 亚洲精品美女 | 精品国产黄色片 | 久久99爱视频 | 特级西西人体444是什么意思 | 色午夜 | 国产精品一区二区久久久久 | 在线观看视频一区二区三区 | 中文伊人| 欧美极品一区二区三区 | a天堂最新版中文在线地址 久久99久久精品国产 | 精选久久 | 超碰97网站 | 波多野结衣久久资源 | 久久免费大片 | 婷婷久久网 | 成人中文字幕+乱码+中文字幕 | 97日日| 91插插插网站 | 99视 | 亚洲一区二区精品3399 | 日本久热| 久草资源在线 | 国产一区二区三区四区在线 | 成人av电影免费在线播放 | 婷婷丁香五 | 久久人人添人人爽添人人88v | 日韩精品一区二区在线观看视频 | 免费91麻豆精品国产自产在线观看 | 九九九九热精品免费视频点播观看 | 东方av免费在线观看 | 国产专区视频在线 | 久久免费看av | 99精品国产99久久久久久福利 | 精品在线看 | 国内精品久久久久久久久 | 成人在线观看日韩 | 成年人免费观看在线视频 | 国产在线视频一区二区 | 国产日韩视频在线播放 | 日韩欧美在线观看 | 久久免费视频在线观看6 | 天堂在线视频免费观看 | 91综合色| 亚洲日本va中文字幕 | 国产亚洲精品久久久久久久久久久久 | 久久人人爽人人爽人人片 | 日韩中文字幕视频在线 | 婷婷综合国产 | 国产精品自产拍在线观看桃花 | 天堂av中文字幕 | 久久国产精品99国产精 | 国产美女精品视频 | 亚州国产精品久久久 | 日韩欧美有码在线 | 国产色a在线观看 | av直接看| 91成人精品一区在线播放69 | 丝袜一区在线 | 中文字幕av免费在线观看 | 久久精品一区二区三区国产主播 | 五月花丁香婷婷 | 国产成人精品在线观看 | 亚洲电影免费 | 久草9视频| 久久免费视频在线 | 久久综合狠狠 | 日韩在线观看a | av在线免费观看黄 | 日韩av进入 | 色综合久久久网 | 欧美极品少妇xbxb性爽爽视频 | 久久久久久久久久久久久久av | 天天视频亚洲 | 一级片免费视频 | 最新精品国产 | 国产一级特黄毛片在线毛片 | 黄色大片免费网站 | 国产色在线,com | 亚洲资源在线 | 玖玖在线播放 | 色狠狠综合 | 天天想夜夜操 | 中文字幕在线播放av | 国产一区不卡在线 | 欧美专区亚洲专区 | 国产视频99| 国产亚洲一区二区在线观看 | 日韩久久午夜一级啪啪 | 一区二区不卡在线观看 | 99操视频 | 免费在线观看av的网站 | 六月丁香色婷婷 | 久产久精国产品 | 久久精品官网 | 亚洲免费在线观看视频 | 天天色综合天天 | 一级片视频在线 | 丰满少妇在线 | 亚洲精品国偷拍自产在线观看 | 日韩视频一区二区三区 | 欧美va在线观看 | av三级av| 亚洲激情小视频 | 久久黄色小说 | 国产精品av在线 | 久久久精品电影 | 国产精品18久久久久久不卡孕妇 | 亚洲人成人在线 | 亚洲一区二区精品在线 | 女人18片毛片90分钟 | 欧美一级日韩三级 | 久久亚洲电影 | 成人黄色av网站 | 91九色视频网站 | 久久69精品久久久久久久电影好 | 国产精品久久久久久久久毛片 | 国产成人久 | 激情丁香5月 | 亚洲精品视频网 | 97国产大学生情侣白嫩酒店 | 久久精品中文 | 国产精品一区二区三区免费看 | 久久av伊人 | 91久久精品日日躁夜夜躁国产 | 中文字幕亚洲欧美 | 久久九九国产精品 | 四虎精品成人免费网站 | 国产一区二区在线免费视频 | 狠狠狠狠狠操 | 美女黄网久久 | 最新国产精品久久精品 | 免费国产一区二区视频 | 黄a在线看 | 久草在线观看视频免费 | 亚洲午夜大片 | 摸bbb搡bbb搡bbbb| 日韩美精品视频 | 亚洲国产精品500在线观看 | 日韩av片免费在线观看 | 天天插综合 | 国产免费叼嘿网站免费 | 天天摸夜夜添 | 久久艹在线观看 | 久久在线免费 | 亚洲综合视频在线 | 久久久国产一区 | 国产精品久久久久久久久久白浆 | 欧美久久九九 | 成人日批视频 | 91看片淫黄大片91 | 免费亚洲婷婷 | 久久久免费精品国产一区二区 | 在线亚洲欧美视频 | 国产69精品久久久久久久久久 | 成人在线视频你懂的 | 91在线精品视频 | 午夜国产一区 | 成人黄色大片在线免费观看 | 99九九视频 | 亚洲欧洲美洲av | 婷婷丁香激情五月 | 一区二区三区动漫 | 国产一级片观看 | 色偷偷97 | 91九色视频导航 | 婷婷色中文网 | 丁香视频全集免费观看 | 久久97超碰 | 深爱开心激情网 | 麻豆国产精品视频 | 亚洲综合激情小说 | 婷婷色站 | 国产美女免费观看 | 久久综合五月婷婷 | 一区二区三区www | 亚洲资源片 | 超碰国产在线 | 亚洲一本视频 | 亚洲精品男人的天堂 | 一二三区在线 | 丝袜美女视频网站 | 中文字幕在线观看三区 | 国产一级视频在线观看 | 日韩欧美一区二区三区视频 | 97视频免费观看2区 亚洲视屏 | 麻豆av电影| 日韩精品中文字幕在线观看 | 黄色免费网站大全 | 91c网站色版视频 | 天天天天综合 | 草免费视频 | 粉嫩aⅴ一区二区三区 | 国产女人18毛片水真多18精品 | 国产精品久久久久久久久久免费看 | 久久免费看a级毛毛片 | 五月天婷婷免费视频 | 国产成人久久av免费高清密臂 | 国产玖玖在线 | 97成人资源站 | 国产成人99久久亚洲综合精品 | 国产伦精品一区二区三区… | 精品国产欧美一区二区 | 国产偷v国产偷∨精品视频 在线草 | 国内精品久久久久久 | 日本性生活一级片 | 国精产品999国精产 久久久久 | 在线 高清 中文字幕 | 国产网红在线 | 日韩欧美电影 | 在线观看国产 | 欧洲一区二区三区精品 | 91亚洲精品乱码久久久久久蜜桃 | 丁香五婷| 国产美女在线精品免费观看 | 久久韩国免费视频 | 久久99视频免费观看 | 六月婷婷色| 成年人黄色大片在线 | 久久精品美女视频网站 | 深夜免费福利在线 | 天天激情综合网 | 国产黄色精品 | 久久久影院一区二区三区 | 国产 日韩 在线 亚洲 字幕 中文 | 99热99| 国产999久久久 | 99r在线播放 | 国产尤物视频在线 | 少妇搡bbbb搡bbb搡69 | 免费高清无人区完整版 | 四虎在线免费观看视频 | 国产精品美女视频网站 | 精品三级av| 色欧美日韩 | 天天插日日插 | 九九综合在线 | 一区二区三区 亚洲 | 久久精品国产精品 | 狠狠五月婷婷 | 亚洲精品午夜国产va久久成人 | 精品在线看 | 深夜免费福利网站 | 国产精品第7页 | 福利视频一二区 | 激情网婷婷 | 最近更新好看的中文字幕 | 亚洲综合视频在线播放 | 久久成人国产 | 胖bbbb搡bbbb擦bbbb| 久久久影视 | 久久国产精品99久久人人澡 | 久久成人国产精品入口 | 99久久久成人国产精品 | 亚洲成a人片综合在线 | 在线免费av电影 | 欧美在线视频日韩 | 亚洲欧美视频 | 天天天插 | 九九导航 | 亚洲精品99久久久久中文字幕 | 国产美女精品视频免费观看 | 久久一区二区三区超碰国产精品 | 综合久久精品 | 午夜国产福利在线 | 亚洲天堂网在线视频观看 | 二区三区中文字幕 | 亚洲国产精品电影在线观看 | 精品国产乱码久久久久久天美 | 99re国产视频 | 91精品久久久久久久99蜜桃 | 国产网站av| 五月天视频网 | 国产成人精品一区二区三区网站观看 | 欧美色图另类 | 黄色免费国产 | 7777xxxx| 日韩三级在线 | 国产精久久 | 在线精品观看国产 | 久久精品国产一区 | 四虎海外影库www4hu | 操操操人人 | 国产精品永久免费视频 | 五月天色婷婷丁香 | 亚洲婷婷在线视频 | 久久99亚洲精品久久 | 久久精品综合视频 | 亚洲一二三在线 | 永久免费毛片在线观看 | 免费在线观看一区 | 亚洲国产精品一区二区久久hs | 91插插视频 | 亚洲 欧美 91 | 日韩成人在线一区二区 | 国产一级二级三级视频 | 欧美一级日韩三级 | sesese图片| 久久精品美女视频 | 国产精品久久久久久久久久免费看 | 麻豆视频国产 | 国产一区二区在线免费视频 | 又粗又长又大又爽又黄少妇毛片 | 香蕉精品视频在线观看 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 久久视频在线观看中文字幕 | 久久新视频 | 探花视频免费观看 | 久久96国产精品久久99软件 | 亚洲a在线观看 | 亚洲色视频 | 一二三区av| 久草视频在线资源站 | adn—256中文在线观看 | 久久久久免费精品视频 | 国产精品激情在线观看 | 在线观看深夜视频 | 久久五月天婷婷 | 久久综合精品国产一区二区三区 | 国产精品乱看 | 中国成人一区 | 亚洲成人黄色在线 | 中文字幕日韩电影 | 日本bbbb摸bbbb| 欧美日韩免费一区 | 国产视频一区在线免费观看 | 亚洲一区美女视频在线观看免费 | 777xxx欧美 | 精品免费 | 日日操日日干 |