免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

C# NPOI 操作 Excel:選型、流式導(dǎo)出與避坑

C# NPOI 操作 Excel:選型、流式導(dǎo)出與避坑 簡介面向正在用 C# 處理 Excel 的 .NET 開發(fā)者這份資料圍繞 NPOI 庫給出可直接參考的讀寫示例覆蓋舊版 .xls 與新版 .xlsx 兩種格式既適合剛接觸 NPOI 的新手入門也適合需要封裝通用工具類的中級開發(fā)者對照借鑒。壓縮包共 15 個(gè)文件以 12 個(gè) dll 依賴庫為主另有 2 個(gè) cs 源碼與 1 個(gè) xml 配置整體約 2.19MBdll 提供 NPOI 各模塊及 JSON、壓縮等支撐能力cs 文件則呈現(xiàn)工具類的組織方式。內(nèi)容涉及工作簿與工作表創(chuàng)建、單元格寫入與遍歷讀取、字體邊框?qū)R等樣式設(shè)置、文件保存和異常處理并按 2012Version 與 201607Version 分版本實(shí)現(xiàn)便于比較不同 NPOI 版本下的 API 差異及 HSSF、XSSF 兩套模型。已有 6358 人學(xué)習(xí)可為項(xiàng)目中的 Excel 導(dǎo)入導(dǎo)出、報(bào)表生成與工具類封裝提供參考。1. 別急著裝 Office先看清 C# NPOI 操作Excel 到底解決什么問題后臺要導(dǎo)一份對賬單服務(wù)器上沒裝 OfficeMicrosoft.Office.Interop.Excel一跑就拋 0x800A03EC這個(gè)場景我見過不止一次。換個(gè)角度看C# NPOI 操作Excel 最省心的地方恰恰是它根本不碰 Office——純托管庫在進(jìn)程里直接拼 xls/xlsx 的二進(jìn)制結(jié)構(gòu)服務(wù)器裝不裝 Office 都能跑。它一套 API 覆蓋兩種格式老的.xls走 HSSF新的.xlsx走 XSSF數(shù)據(jù)量大再換 SXSSF 流式寫十萬行也不至于把內(nèi)存吃穿。適合做報(bào)表導(dǎo)出、批量數(shù)據(jù)導(dǎo)入、模板填充的后臺服務(wù)、桌面工具和接口項(xiàng)目如果你只是偶爾手動改個(gè)表那確實(shí)沒必要上它。2. 技術(shù)選型與工程結(jié)構(gòu)HSSF、XSSF、SXSSF 三套模型怎么分工打開 NPOI 的命名空間會看到一堆HSSF開頭的類第一反應(yīng)通常是“這不是 Java 那套的翻版嗎”。確實(shí)接口模型沿用了IWorkbook/ISheet/IRow/ICell這層抽象好處是同一份業(yè)務(wù)代碼換個(gè)實(shí)現(xiàn)類就能讀寫不同格式壞處是新手很容易在new的那一行就把類型寫死后面想兼容.xls就得大改。選型這一步基本決定了后面會不會返工所以拆代碼之前先把模型說清楚。2.1 三種工作簿模型的邊界模型對應(yīng)格式內(nèi)存形態(tài)適用量級主要限制HSSFWorkbook.xls全量駐留內(nèi)存幾萬行以內(nèi)單表 65536 行、256 列XSSFWorkbook.xlsxDOM 全量駐留十萬行內(nèi)看堆大小行數(shù)越多內(nèi)存線性上漲SXSSFWorkbook.xlsx滑動窗口 磁盤臨時(shí)文件百萬行級已刷出的行不能再改、不能刪行我的默認(rèn)規(guī)則很粗暴對方?jīng)]明確要求.xls一律XSSFWorkbook導(dǎo)出預(yù)估超過五萬行直接上SXSSFWorkbook只有對接老系統(tǒng)、對方還在用舊版表格軟件時(shí)才回頭用HSSF。這條規(guī)則能省掉九成的兼容性扯皮。SXSSF 的代價(jià)必須提前說清楚。它把已經(jīng)寫出去的行刷到磁盤臨時(shí)文件內(nèi)存里只留窗口內(nèi)的那幾百行所以你別想回頭sheet.GetRow(0)去改第一行——那時(shí)候它已經(jīng)在臨時(shí)文件里了GetRow直接返回null。需要回頭改的東西合計(jì)行、頁腳匯總要么放最后寫要么在窗口還沒刷出去之前處理掉。這個(gè)限制踩過一次就記住了。還有一個(gè)反直覺的點(diǎn)讀文件時(shí)判斷格式不要靠文件后綴用WorkbookFactory.Create(stream)讓它自己嗅探。業(yè)務(wù)方發(fā)過來的“對賬單.xls”里裝著的其實(shí)是 HTML 表格這種事我一年能遇到兩回。2.2 示例工程的分層與目錄結(jié)構(gòu)示例工程我按“核心邏輯不依賴 UI、不依賴文件系統(tǒng)”來切目錄長這樣NpoiExcelDemo/ ├── NpoiExcelDemo.sln ├── src/ │ ├── NpoiExcelDemo.Core/ # 只做 Excel 讀寫不放業(yè)務(wù) │ │ ├── ExcelReader.cs │ │ ├── ExcelWriter.cs │ │ ├── ExcelStyleFactory.cs │ │ ├── ExcelColumnAttribute.cs │ │ └── Models/OrderRow.cs │ ├── NpoiExcelDemo.Console/ # 命令行入口跑兩個(gè)示例 │ │ └── Program.cs │ └── NpoiExcelDemo.Tests/ # xUnit用內(nèi)存流做往返測試 │ └── RoundTripTests.cs ├── samples/ │ ├── legacy.xls # 老格式樣本 │ └── modern.xlsx # 新格式樣本 └── templates/ └── 對賬單模板.xlsxCore里我堅(jiān)持不讓IWorkbook泄漏出去。對外方法簽名一律是Stream進(jìn)、Stream或ListT出業(yè)務(wù)層根本不需要using NPOI.SS.UserModel;。這么做有兩個(gè)直接好處單測里傳一個(gè)MemoryStream就能跑完整鏈路不落盤Web 上傳場景拿到IFormFile.OpenReadStream()可以直接喂進(jìn)去不用先存臨時(shí)文件再刪。samples目錄的作用容易被低估。.xls和.xlsx在單元格類型、日期序列號、公式緩存上的行為并不完全一致光靠猜沒用必須有一份真實(shí)的舊格式文件反復(fù)驗(yàn)證。templates目錄則是給“模板填充”這種需求準(zhǔn)備的——表頭、樣式、合并單元格都在模板里做好代碼只負(fù)責(zé)往里塞數(shù)據(jù)行改樣式的時(shí)候不用改代碼。3. 從零跑通裝包、寫第一個(gè) xlsx、再讀回 xls這一章的操作照著敲就能跑起來目標(biāo)是把“寫出去”和“讀進(jìn)來”這兩條鏈路都走通一遍中間不留黑匣子。3.1 建工程與引包# 建解決方案和兩個(gè)項(xiàng)目 dotnet new sln -n NpoiExcelDemo dotnet new classlib -n NpoiExcelDemo.Core -o src/NpoiExcelDemo.Core dotnet new console -n NpoiExcelDemo.Console -o src/NpoiExcelDemo.Console # 掛到解決方案下 dotnet sln add src/NpoiExcelDemo.Core src/NpoiExcelDemo.Console # NPOI 只需要裝在 Core 里Console 通過項(xiàng)目引用拿到 dotnet add src/NpoiExcelDemo.Core package NPOI dotnet add src/NpoiExcelDemo.Console reference src/NpoiExcelDemo.Core這里面幾個(gè)參數(shù)值得說明。-o是指定輸出目錄把項(xiàng)目塞進(jìn)src/是習(xí)慣不塞也能跑。dotnet add package NPOI不寫版本號默認(rèn)拉最新穩(wěn)定版如果目標(biāo)框架是netstandard2.0要給老項(xiàng)目引用加-f netstandard2.0或者直接改 csproj 里的TargetFramework。Framework 4.x 的老項(xiàng)目不走 CLI在包管理器里裝完記得看一眼依賴項(xiàng)——NPOI 會順帶拉一個(gè)壓縮庫發(fā)布的時(shí)候別只拷了NPOI.dll就以為完事了缺依賴的報(bào)錯(cuò)信息通常很含糊只說“未能加載文件或程序集”排查起來全靠猜。提示目標(biāo)框架選net8.0還是netstandard2.0取決于調(diào)用方。庫給多個(gè)項(xiàng)目共用就選netstandard2.0純新項(xiàng)目選net8.0能用上Span之類的新 API。3.2 寫出第一個(gè) .xlsxNPOI 的層級就四層工作簿 → 工作表 → 行 → 單元格。下面這段是最小閉環(huán)using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public static void WriteSimple(string path) { // 1. 工作簿XSSF 對應(yīng) .xlsx IWorkbook workbook new XSSFWorkbook(); ISheet sheet workbook.CreateSheet(對賬單); // 2. 表頭行 IRow header sheet.CreateRow(0); string[] titles { 訂單號, 客戶, 金額, 下單時(shí)間 }; for (int i 0; i titles.Length; i) { header.CreateCell(i).SetCellValue(titles[i]); } // 3. 數(shù)據(jù)行 IRow row sheet.CreateRow(1); row.CreateCell(0).SetCellValue(SO-2024001); row.CreateCell(1).SetCellValue(某客戶); row.CreateCell(2).SetCellValue(1280.50); // 數(shù)值走 double 重載 row.CreateCell(3).SetCellValue(DateTime.Now); // 日期直接給 DateTime // 4. 列寬單位是 1/256 個(gè)字符寬度20 * 256 20 字符 sheet.SetColumnWidth(0, 20 * 256); using var fs new FileStream(path, FileMode.Create, FileAccess.Write); workbook.Write(fs); }逐段說一下。CreateSheet傳的名字就是 Excel 底部的標(biāo)簽名超過 31 個(gè)字符或含[]:*?/\會直接拋異常。CreateCell(i)的索引從 0 開始跳著創(chuàng)建也允許比如只創(chuàng)建第 0 和第 5 個(gè)中間的空單元格讀回來是CellType.Blank。金額這一行是關(guān)鍵SetCellValue(1280.50)存的是數(shù)值Excel 里能參與求和如果圖省事寫成SetCellValue(1280.50)存的是文本Excel 會在左上角給你標(biāo)個(gè)綠色小三角用戶一點(diǎn)“轉(zhuǎn)換為數(shù)字”全部格式又亂掉血淚經(jīng)驗(yàn)。日期同理SetCellValue(DateTime)會把它轉(zhuǎn)成序列號存儲顯示格式由單元格樣式的DataFormat決定不設(shè)樣式就是默認(rèn)的日期顯示。最后workbook.Write(fs)這個(gè)重載在不同版本上行為有差異有的會把流關(guān)掉有的不會。不確定的話就在Write之后立刻fs.Flush()并且不要指望后面還能繼續(xù)往這個(gè)流里寫東西。3.3 用 WorkbookFactory 統(tǒng)一讀 .xls 和 .xlsx讀這邊最容易犯的錯(cuò)是寫死new XSSFWorkbook(fs)遇到.xls就拋Invalid header signature。正確姿勢是工廠加接口using NPOI.SS.UserModel; public static void ReadAny(string path) { using var fs new FileStream(path, FileMode.Open, FileAccess.Read); // 關(guān)鍵工廠根據(jù)文件頭自動選 HSSF 還是 XSSF IWorkbook workbook WorkbookFactory.Create(fs); for (int s 0; s workbook.NumberOfSheets; s) { ISheet sheet workbook.GetSheetAt(s); // LastRowNum 是最后一行索引空表返回 -1不能直接當(dāng)行數(shù) for (int r sheet.FirstRowNum; r sheet.LastRowNum; r) { IRow row sheet.GetRow(r); if (row null) continue; // 整行被刪過就是 null不判會 NRE for (int c 0; c row.LastCellNum; c) { ICell cell row.GetCell(c); Console.Write(ExcelReader.GetCellText(cell) \t); } Console.WriteLine(); } } }WorkbookFactory.Create支持傳Stream或FileInfo內(nèi)部會讀文件頭判斷格式比看后綴靠譜得多。FirstRowNum和LastRowNum都返回索引空表或者全空行的情況下LastRowNum可能是-1、0或者你以為的行數(shù)寫for循環(huán)時(shí)用并且判row null這兩道保險(xiǎn)缺一不可。GetSheetAt是按順序取GetSheet(名字)是按名取。名字取不到會返回null而不是拋異常后面直接.GetRow()就炸了所以按名取的時(shí)候記得判空。3.4 跑起來看一眼dotnet run --project src/NpoiExcelDemo.Console -- ./out/demo.xlsx ./samples/legacy.xls參數(shù)依次是輸出路徑和要讀的舊格式樣本。跑完先確認(rèn)三件事out/demo.xlsx能被正常打開、金額那一列右對齊且能求和、legacy.xls的中文沒有亂碼。這三條過了說明環(huán)境、依賴、編碼都沒問題后面再改代碼就是純業(yè)務(wù)活了。4. 核心模塊拆解取值、樣式、大文件、格式差異這一段是真正要反復(fù)用的東西。示例里那幾個(gè)方法寫短是因?yàn)榘阉锌佣际者M(jìn)了這幾個(gè)方法里。4.1 單元格取值CellType 分支一個(gè)都不能漏讀 Excel 最典型的故障是“日期變成 45000 這種數(shù)字”根子在CellType.Numeric—— 日期在底層就是數(shù)字靠樣式區(qū)分。所以取值方法必須寫成這樣public static string GetCellText(ICell cell) { if (cell null) return string.Empty; switch (cell.CellType) { case CellType.String: return cell.StringCellValue; case CellType.Numeric: // 日期底層是序列號必須靠單元格樣式判斷直接 ToString 會得到 45000 if (DateUtil.IsCellDateFormatted(cell)) return cell.DateCellValue?.ToString(yyyy-MM-dd HH:mm:ss) ?? ; return cell.NumericCellValue.ToString(); case CellType.Boolean: return cell.BooleanCellValue ? TRUE : FALSE; case CellType.Formula: // 公式要按緩存結(jié)果類型再分一次支不能直接取 StringCellValue switch (cell.CachedFormulaResultType) { case CellType.Numeric: return DateUtil.IsCellDateFormatted(cell) ? cell.DateCellValue?.ToString(yyyy-MM-dd) ?? : cell.NumericCellValue.ToString(); case CellType.String: return cell.StringCellValue; default: return cell.ToString() ?? ; } case CellType.Blank: return string.Empty; case CellType.Error: // 把 #DIV/0! 這類錯(cuò)誤碼還原成可讀文本 return FormulaError.ForInt(cell.ErrorCellValue).String; default: return cell.ToString() ?? string.Empty; } }三個(gè)地方值得單獨(dú)講。DateUtil.IsCellDateFormatted(cell)是個(gè)靜態(tài)工具方法內(nèi)部讀的是單元格樣式的DataFormat字符串判斷是不是日期/時(shí)間格式比自己寫正則靠譜。CellType.Formula分支里必須先看CachedFormulaResultType—— 公式單元格的StringCellValue只有在緩存結(jié)果是字符串時(shí)才有效緩存是數(shù)字你卻去取字符串拿到的是空串或者直接拋異常這種問題在日志里只表現(xiàn)為“某幾列讀出來是空的”非常難定位。FormulaError.ForInt把0x07這種錯(cuò)誤碼轉(zhuǎn)成#DIV/0!報(bào)表里帶著錯(cuò)誤碼有時(shí)候反而是有用的信息別急著當(dāng)成異常吞掉。注意DateCellValue在較新版本里是DateTime?老版本可能是DateTime。如果編譯報(bào)“無法將 DateTime 轉(zhuǎn)換為 DateTime?”說明你手上的版本比較舊去掉?.就行。4.2 樣式復(fù)用ICellStyle 是共享池不是隨手 new 的樣式是 NPOI 里最容易被寫成性能問題的模塊。工作簿內(nèi)部維護(hù)一個(gè)樣式池你每CreateCellStyle()一次就多占一個(gè)槽位.xls上限大約 4000 個(gè).xlsx大約 64000 個(gè)超了直接拋異常而且文件體積會以肉眼可見的速度膨脹——見過一個(gè)導(dǎo)出的表 800KB 數(shù)據(jù)配 60MB 樣式就是這么來的。正確做法是做個(gè)樣式工廠按 key 緩存public sealed class ExcelStyleFactory { private readonly IWorkbook _wb; private readonly Dictionarystring, ICellStyle _cache new(); public ExcelStyleFactory(IWorkbook wb) _wb wb; public ICellStyle Money(string format #,##0.00) { if (_cache.TryGetValue(format, out var cached)) return cached; var style _wb.CreateCellStyle(); // 每調(diào)一次就占一個(gè)樣式槽 style.DataFormat _wb.CreateDataFormat().GetFormat(format); style.Alignment HorizontalAlignment.Right; style.BorderBottom BorderStyle.Thin; style.VerticalAlignment VerticalAlignment.Center; _cache[format] style; return style; } }CreateDataFormat().GetFormat(#,##0.00)里的格式串跟 Excel 自定義格式語法一致0.00%、yyyy/m/d、#,##0;(#,##0)這些都能直接用格式串本身也是被緩存的同一個(gè)串多次調(diào)用返回同一個(gè)對象。Money方法用格式串當(dāng)緩存 key是因?yàn)橥粋€(gè)工作簿里不同列可能需要不同小數(shù)位用字符串做 key 天然支持多套格式共存。用法上先取一次樣式循環(huán)里反復(fù)賦給不同單元格var styles new ExcelStyleFactory(workbook); var moneyStyle styles.Money(); foreach (var item in rows) { var cell row.CreateCell(2); cell.SetCellValue(item.Amount); cell.CellStyle moneyStyle; // 賦值不是 new }4.3 SXSSF 流式導(dǎo)出十萬行不能再用 XSSF數(shù)據(jù)量上去以后XSSFWorkbook把所有行都留在內(nèi)存里十萬行乘以十幾列堆基本就撐不住了。換成 SXSSFpublic static void WriteLarge(string path, IEnumerableOrderRow rows, int windowSize 500) { // windowSize內(nèi)存里保留的行數(shù)超出的會被刷到磁盤臨時(shí)文件 var workbook new SXSSFWorkbook(windowSize); try { var sheet workbook.CreateSheet(明細(xì)); int r 0; foreach (var item in rows) { var row sheet.CreateRow(r); row.CreateCell(0).SetCellValue(item.OrderNo); row.CreateCell(1).SetCellValue(item.CustomerName); row.CreateCell(2).SetCellValue(item.Amount); // 注意這一行一旦被刷出去后面 GetRow(r) 就取不到了 } using var fs new FileStream(path, FileMode.Create, FileAccess.Write); workbook.Write(fs); fs.Flush(); } finally { workbook.Close(); workbook.Dispose(); // 必須顯式調(diào)用否則臨時(shí)文件會留在系統(tǒng)臨時(shí)目錄 } }windowSize這個(gè)參數(shù)是內(nèi)存和磁盤 IO 的平衡點(diǎn)。設(shè)太小比如 100刷盤頻繁寫十萬行能明顯感覺到慢設(shè)太大比如 5000內(nèi)存優(yōu)勢就沒那么明顯了。我一般按 500 起步實(shí)測導(dǎo)出耗時(shí)偏高再往上調(diào)。Dispose()這一步不能省。SXSSF 在系統(tǒng)臨時(shí)目錄里建的文件只有Dispose才會清理進(jìn)程長時(shí)間跑批又不釋放臨時(shí)目錄遲早被塞滿然后你會收獲一堆“磁盤空間不足”的告警排查半天發(fā)現(xiàn)是自己導(dǎo)出的表。4.4 兩種格式的行為差異能力.xlsHSSF.xlsxXSSF / SXSSF單表最大行655361048576單表最大列25616384單元格樣式上限約 4000約 64000文件本質(zhì)二進(jìn)制復(fù)合文檔zip 包 若干 xml新函數(shù)支持只有老函數(shù)集基本都能用讀入內(nèi)存占用相對低相對高這張表最有用的兩行是行數(shù)上限和樣式上限。行數(shù)超了不會報(bào)錯(cuò)會直接截?cái)嘁话偃f條數(shù)據(jù)導(dǎo)出成.xls最后只剩六萬五而且沒有任何提示——這種 bug 上線之后才被發(fā)現(xiàn)返工成本極高。樣式上限則是另一個(gè)方向.xls到 4000 就拋InvalidOperationException堆棧里看不到你的業(yè)務(wù)代碼只看到 NPOI 內(nèi)部的Workbook.CreateCellStyle。5. 避坑與排查五個(gè)真踩過的問題5.1 日期讀出來是 45000 這樣的整數(shù)現(xiàn)象導(dǎo)入的對賬單里時(shí)間列全是五位數(shù)用戶以為數(shù)據(jù)錯(cuò)了。 原因CellType.Numeric分支直接NumericCellValue.ToString()沒判斷日期格式。日期在 Excel 里本質(zhì)是從 1900-01-01 起算的天數(shù)45000就是某個(gè)真實(shí)日期。 解決取值統(tǒng)一走 4.1 那個(gè)GetCellTextNumeric分支先DateUtil.IsCellDateFormatted(cell)再決定是格式化日期還是原樣輸出數(shù)字。5.2 導(dǎo)出的文件打不開提示“發(fā)現(xiàn)不可讀取的內(nèi)容”現(xiàn)象瀏覽器下載下來的 xlsxExcel 打開報(bào)修復(fù)提示點(diǎn)“是”之后內(nèi)容可能還在也可能丟了。 原因九成是流被提前關(guān)掉或者Position沒歸零。workbook.Write(stream)在某些版本會關(guān)閉傳入的流之后Response.Body再寫就寫不進(jìn)去了另一種是同一個(gè)MemoryStream寫完沒Position 0就直接當(dāng)讀的源用。 解決寫文件的流自己using管好生命周期別依賴庫來關(guān)Web 場景用MemoryStream寫完先ToArray()再輸出讀之前一律stream.Position 0。5.3 大批量導(dǎo)出時(shí)內(nèi)存飆升甚至 OOM現(xiàn)象導(dǎo)五萬行的時(shí)候進(jìn)程內(nèi)存漲到 2G 以上容器直接被 kill。 原因用了XSSFWorkbook所有行和單元格對象都駐留在堆里一個(gè)單元格對象幾十字節(jié)五萬行乘二十列就是一千萬個(gè)對象。 解決換成SXSSFWorkbook窗口設(shè) 500 左右順手檢查一下是不是在循環(huán)里CreateCellStyle那個(gè)也是內(nèi)存大戶。5.4 讀 .xls 報(bào) Invalid header signature現(xiàn)象文件后綴明明是.xlsnew XSSFWorkbook(fs)直接拋異常。 原因一種是用錯(cuò)了實(shí)現(xiàn)類.xls得用 HSSF另一種更陰——某些系統(tǒng)導(dǎo)出的“xls”其實(shí)是 HTML 表格或者 CSV 改了后綴二進(jìn)制頭根本不是 OLE 復(fù)合文檔。 解決讀入口統(tǒng)一用WorkbookFactory.Create(fs)讓庫自己判斷如果工廠也認(rèn)不出來用十六進(jìn)制工具看一眼文件頭D0 CF 11 E0是真的 xlsPK是 xlsxhtml或者table就是偽裝的得先當(dāng)文本解析再轉(zhuǎn)。5.5 單元格樣式莫名不生效現(xiàn)象設(shè)置了邊框和背景色打開文件發(fā)現(xiàn)只有第一行有后面全是白板。 原因ICellStyle是工作簿級別的共享對象但很多人習(xí)慣在循環(huán)里CreateCellStyle()之后只對當(dāng)前單元格賦值同時(shí)又在別處CloneStyleFrom覆蓋了屬性結(jié)果樣式對象被復(fù)用后互相污染。 解決樣式只在工廠里創(chuàng)建一次循環(huán)里只做cell.CellStyle cachedStyle賦值確實(shí)需要“繼承再加一點(diǎn)差異”的用CloneStyleFrom克隆出一個(gè)新對象并單獨(dú)緩存別在原對象上改。6. 二次開發(fā)把示例收成一層能復(fù)用的導(dǎo)入導(dǎo)出示例代碼寫到后面你會發(fā)現(xiàn)每個(gè)業(yè)務(wù)實(shí)體都在重復(fù)“讀表頭 → 找列 → 轉(zhuǎn)類型”這套動作。我一般會加一個(gè)特性加反射的映射層讓業(yè)務(wù)代碼只寫實(shí)體。[AttributeUsage(AttributeTargets.Property)] public sealed class ExcelColumnAttribute : Attribute { public ExcelColumnAttribute(string title) Title title; public string Title { get; } } public sealed class OrderRow { [ExcelColumn(訂單號)] public string OrderNo { get; set; } ; [ExcelColumn(金額)] public decimal Amount { get; set; } [ExcelColumn(下單時(shí)間)] public DateTime CreatedAt { get; set; } }讀取端靠表頭文本反查屬性允許列順序和實(shí)體屬性順序不一致public static ListT ReadT(Stream stream) where T : new() { var map typeof(T).GetProperties() .Select(p (Prop: p, Attr: p.GetCustomAttributeExcelColumnAttribute())) .Where(x x.Attr ! null) .ToDictionary(x x.Attr!.Title, x x.Prop); IWorkbook wb WorkbookFactory.Create(stream); ISheet sheet wb.GetSheetAt(0); IRow header sheet.GetRow(sheet.FirstRowNum); // 表頭文本 - 列索引 var index new Dictionarystring, int(); for (int c 0; c header.LastCellNum; c) { var title ExcelReader.GetCellText(header.GetCell(c)).Trim(); if (!string.IsNullOrEmpty(title) map.ContainsKey(title)) index[title] c; } var list new ListT(); for (int r sheet.FirstRowNum 1; r sheet.LastRowNum; r) { var row sheet.GetRow(r); if (row null) continue; var entity new T(); foreach (var (title, prop) in map) { if (!index.TryGetValue(title, out var c)) continue; var text ExcelReader.GetCellText(row.GetCell(c)); if (string.IsNullOrWhiteSpace(text)) continue; // 可空類型要?jiǎng)円粚覥onvert.ChangeType 不認(rèn) NullableT var target Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType; prop.SetValue(entity, Convert.ChangeType(text, target)); } list.Add(entity); } return list; }改完之后業(yè)務(wù)側(cè)就一行var rows ExcelImporter.ReadOrderRow(stream);字段增減只改實(shí)體上的特性不用碰解析代碼。驗(yàn)證方式我用往返測試不落盤、跑得快[Fact] public void Xlsx_RoundTrip_ShouldKeepAmount() { var ms new MemoryStream(); using (var wb new XSSFWorkbook()) { var sheet wb.CreateSheet(t); var head sheet.CreateRow(0); head.CreateCell(0).SetCellValue(訂單號); head.CreateCell(1).SetCellValue(金額); var data sheet.CreateRow(1); data.CreateCell(0).SetCellValue(SO-1); data.CreateCell(1).SetCellValue(99.5); wb.Write(ms); } ms.Position 0; // 不歸零讀出來就是空的 var rows ExcelImporter.ReadOrderRow(ms); Assert.Single(rows); Assert.Equal(99.5m, rows[0].Amount); }這個(gè)測試我建議再補(bǔ)三個(gè)邊界樣本一個(gè)帶合并單元格的表頭、一個(gè)日期列為空的行、一個(gè)金額列是公式的表。前兩個(gè)驗(yàn)證判空邏輯第三個(gè)驗(yàn)證CachedFormulaResultType分支。這三個(gè)樣本跑通線上八成的導(dǎo)入投訴基本能提前擋掉。從那以后我每次接 Excel 相關(guān)的需求都會先問清三句話讀進(jìn)來的是什么格式、寫出去給誰用、最大多少行然后才動手寫第一行代碼。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲综合激情五月久久| 婷婷五月天福利| 丰满少妇乱A片无码| 九九热在线精品| 四虎成人精品永久免费AV九九| 丁香六月综合激情| 激情五月天伊人影院| 在线观看亚洲AV| 色偷偷综合| 5月色亭亭视频| 好大好粗嗯啊-一级黄色大片免费观看-成人AV| 99A片| 丁香六月天婷婷色| 久久99婷婷| 丁香五月激情综合| 午夜成人网站在线观看| 色狠狠色综合| 色五月天综合| 99re66热这里只有精品| 婷婷五月天黄色网址| 精品九九在线观看视频| 婷婷五月丁香色综合| 五月天成人小说| 99热这里只有精品50| 久久伦乱| 99九九热视频免费| 99久久五月婷婷| 思思久久99| 热99视频| 五月天欧美 另类小说| 99热国产婷婷| 丁香五月天婷婷大香蕉| 91热久88| 日碰日| 97操视频| 97人人做| 亚洲第一成人无码A片| 校园激情 亚洲| 色情婷婷。| 日韩AV中文在线观看| 五月天激情小说| 丁香婷婷久久 | 99热这里只有精品33| 久久婷婷丁香视频网| 伊人综合网站| 国产肥白大熟妇BBBB视频| 99精品无码| 婷婷五月丁香伊人网| 天天色图| 淫视馆aV二区一区| 九九色精品| 在线91日韩| 婷婷五月激情小说| 区啪精品| 996精品热视频| 99惹 精品在线| 婷婷五月综合激情| 亚洲精品一区中文字幕乱码| 五月丁香啪| www.五月天色色.com| 天天插综合| 五月婷婷之激情五月| ri电影在线| 曰曰久久| 五月婷婷亚洲综合网| 色六月丁香婷婷啪啪啪| 99热视| 99热在线免费观看精品| 婷婷激情五月综合在线视频| 亚洲综合丁香五月天| 日韩av网址大全| 最新五月天婷婷影| 五月婷婷六月丁香综合在线| 香焦网五月天| 丁香色色网| 天天干电影| 综合五月婷婷| 大香蕉AV电影在线| 亚洲av无码精品色午夜| 另类图片色五月| 性生活视频98791| AAA久久久| www色五月| 国产成人av在线播放| 丁香五月婷婷基地| 俺去也在线www色官网| 激情综合播播| 日韩欧美不卡| 日本在线观看91| 99 福利 导航| 国产免费一区二区在线A片视频| 天天性视频| 99热91| 亚洲久热| 色五月在线播放| 五月婷婷六月情| 无码色| 99啪啪网| 国产精产国品一二三在观看| 欧美日韩成人在线网站| 婷婷区日本| 五月花亭亭| 色噜噜狠噜噜视频| 少妇熟女视频一区二区三区| 99热在线观看免费精品| 涩涩五月天| 中文字幕乱码亚洲精品一区| …亚洲黄色在线播放日韩、av中文a…| 色月九九| 天堂草在线看www| 色香久久| 天天色中文字幕女优AV| 91欧美| 丁香五月婷婷丫| 色色色成人网| 亚州美女| 欧美99热| 五月天婷婷丁香导航| 丁香六月综合激情| 色婷婷啪啪| 大香网伊人久久综合| 五月婷深深爱激情网| 亚洲无码11| 五月丁欧美| 久热视频这里只有精品| 人妻丰满精品一区二区A片| 日韩成人电影av| 美女亚洲五月丁香| 九九色逼| 都市激情亚洲| 26uuu亚洲精品国产| 天天搡日日搡aaaaⅩ| 极品人妻VIDEOSSS人妻| 欧美va精品va老师va| 五月丁香六月综合基地| 91麻豆国产三级精品福利在线观看| 极品色丁香| 婷婷五月天激情五月天| 任你躁XXXXX麻豆精品| 欧美色色色色色色色| 亚洲久热无码| 国产av天天插天天操天天爽| 丁香五月婷婷色综合基地| 夜夜撸夜夜骑| 激情综合在线播放| 六月丁香婷婷综合影院| 五月天色视频| 国产精品A成V人在线播放| Caop在线| 五月婷婷丁香| 99亚洲视频| 色婷婷久久综合丁香五月| 久久99综合| 91丨九色丨熟女丰满| 99色在线观看视频| 婷久久高清| 天天粽合合合合| 日本色99| 久久98| 天天拍天天操| 色综合激情| 久久精品夜色噜噜亚洲a∨| 激情婷婷丁香| 99热这里只有精品国产精品| 丁香婷婷综合喷| 国产毛片精品一区二区色欲黄A片| 99热碰碰| 开心五月婷婷激情| 婷婷 久综合| 成人亚洲精品| 熟女婷婷网站一婷婷五月一丁香婷婷一婷婷激情网| 99热亚洲| 思思热在线精品视频网站| 婷婷五月天电影网 | 久久久精品99| 中文AV在线观看| www.99热这里精品| 丁香五月婷婷影院| 色人五月婷婷| 色色影院黄大片| 久久性爱视频这里只有精品| 婷婷激情五月视频| 久久激情综合| 翔田千里无码| 99免费青青蜜臀| 婷婷九月在线| 高清无码.com| 中文字幕av久久爽| 97人人看| 色色色综合| 色婷婷丁香五月在线| 色五月激情五月| 99热这里有精品24| 玖玖婷婷五月| av免费在线看不卡无毒| 激情 婷婷| www激情网站| 婷婷六月综合基地| 婷婷AV丁香| 熟妇人妻中文字幕无码老熟妇 | 狠狠干总合| 极品人妻VIDEOSSS人妻| 五月丁香婷婷综合| 99 频99热国里只有精品| 八戒青柠影视剧在线观看| 亚洲第一色网站| 日本视频不卡123区| 五月婷婷丁香在线| 99热乎| 最近中文字幕2019视频1| 激情综合亚洲色婷婷五月| 色色热日| 五月天成人综合| 26uu| 东京热免费视频| 色婷五月天| 婷婷爱五月天人人爱| 久人操| 国产精品色婷婷久久久精品| 婷婷五月丁香色情| 伊人干综合| 欧美日本日韩| 国产精品电影| 精品无吗va视频免费观看| 欧美性爱中文字幕| 开心婷婷五月综合| 日本色色网| 2025天天操| 色99在线| 97干欧美| 婷婷丁香社区| 9热成人在线视频| 丁香九月婷| 99热这里只有国产精品| 美女天天艹人人爽| www超碰| 国产特黄色精品一区二区三区精品无广告 | 啪啪啪综合网| 天天干天天爽| 天天艹夜夜艹| 开心五月深爱婷婷| 精品综合五月| 99re久热只有精品6在线直播| 蜜乳人妻一区二区三区| 综合另类激情| 一级片无码| 涩涩涩五月天| 丁香婷婷网| 亚洲天天操| 翔田千里aV中文字幕| 在线观看亚洲AV| 婷婷婷狠狠| 婷婷五月天网| 97人人超| 色欲久久综合| 天天操夜夜操| 久久婷婷91| 五月婷婷激情四月| 欧美人妻一区二区| av操B网站| 九九色影视| 爱婷婷久久视频| www.色五月.com| 美女被肏网站在线看| 九九色热| 91se在线观看| 欧美一级毛卡片无码| 综合99综合久久久久久久| 五月综合六月丁| 超碰在线国产| 九九香蕉网| 五月丁香91| 丁香五月激情五月色综合| 欧美va亚洲va| 国产成人精品一区二三区熟女在线| www.99日本| 深爱五月最新网址| 中文字幕综合色| 五月婷综合性中心| 免费碰碰视频久| 六月婷婷之青青草| 少妇真实被内射视频三四区| 日撸夜撸日操| 五月婷九九草| 99视频网址| 色婷婷婷婷| 久久婷婷五月综合色奶水99啪| 九九热视频在线观看| 骚逼视频一区2区| 五月婷婷综合色拍| 伊人成综合五月婷婷| 日韩综合大黄| 99er热精品视频| 黄色三级日本| 五月天天天开心激情网| 亚洲AV影片在线观看| 伊人狠狠干| 日日噜噜久久婷婷五月天| 激情久久久久久久久| 九月婷婷激情| 精品国产乱码久久久久夜深人妻| 色婷婷视频在线| 第五婷婷伊人丁香色| 狠狠干狠狠干| 婷婷色六月| 婷婷五月在线综合| 夜夜夜夜操| 色婷婷久久9.com| 色婷久久| 色综合九九| 91热久| 久草A片| 色五月综合激情| 免费国产VA国产免费| www,99视频| 激情五月天综合| 久久激情五月网| 丁香五月婷婷激情网| 性爱激情五月| 操碰91| 天天干天天爽| 五月开心深爱激情网| 久久这里只有精品07 | 色噜噜狠狠一区二区三区| 五月天俺去也| 无码网站视频| AV操操操| 久久资源网五月婷| 操碰99| 泰州成人视频| 激情网五月天| 五月天丁香综合| 狼人婷婷综合| 婷香五月| 婷婷色婷婷| 婷婷成人在线| 五月丁香综合激情网| 亚洲第一成人无码A片| 久热伊人在91| 久久天堂加勒比| 伊人婷婷五月| 五月婷婷六月奇米网丁香| 天天色色婷婷| 66色在线日韩| 青草五月天| 啪啪综合网| 亚洲欧美在线观看| 日本三日本三级少妇三级66| 久久久99婷婷久久久久久| 中文字幕+中文在线| 超碰不卡在线| 极品人妻videosss人妻| 天天天天爽爽天干| Av大香蕉| 九久久婷婷| 五月婷婷七月丁香| 三区激情四射av| 99热这里只有免费| 热99在线| 三级99热| 色情五月天A片| 在线观看欧美| 97人妻碰碰碰久久| 五月激情开心婷婷| 亚洲综合热| 五月色婷婷影院| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 色色色999| 大香蕉丁香五月| 超碰97人人操| 婷婷五月色激情欧美激情| se99视频| 超碰97久久| 激情图片婷婷| 九九黄色网| 五月亚洲激情| 丁香五月综合网亚洲综合欧美狠狠| 99综合| 婷婷五月天社区| 99热色婷婷| 天天做天天要天天爽| 色五月婷婷综合| 玖玖@三月天天丁香婷婷| 操日视频| 99激情| cao视频,现在观看| 婷婷激情五月天在线| 九热视频| 五月婷婷xxx| 丁香婷婷五月| 97精品自拍视频| 俺去也在线视频| 无码激情AAAAA片-区区| 初夜av| 狠狠色婷婷7777久| 99热 免费| 综合网亚洲| 99热大香蕉| 大香蕉九九| 天天色图| 婷婷六月激情| 思思视频这里是精品| 激情五月影院| 美女丁香五月天| 120分钟婬片免费看| 高潮毛片遮挡费高一百度| 五月天六月色| 日韩色色视频www| 成人资源在线| 婷婷五月天基地| www.夜夜騎夜夜狠| 婷婷开心深爱五月天| 拍真实国产伦偷精品| 色区域网站视频| 色婷婷综合电影| 久热 91| 天天综合五月天| 婷婷免费无马| 大香蕉AV电影在线| 26uuu欧美日本| 免费试看小视频 99| 欧在线一区| 婷婷色丁香五月| 欧美久久五月婷婷| 婷婷六月啪啪| 久久人人九| 90色免费视频| 永久精品| 六月丁香五月天| 国产99美少妇| 五月天婷久精视频| 天干干夜夜操| 他改变了拜占庭| 久久草中文日韩欧美| 超碰九色| 亚洲AV中文在线| 这里只有精品无码| 丁香婷婷基地| 久久丝丝热| 欧美日韩中国| 丁香五月亚洲综合| 久久AV无码精品人妻系列试探| 9l视频自拍9l视频自拍九色学生| 亚洲va欧美va天堂v国产综合| VA国产在线综合网站| 伊人玖玖精品| 亚洲情色一区| 欧美在线干| 色五月天丁香婷婷| 丁香久久综合| 色综合丁香婷婷| 69精品人妻不卡视频| 丝雨一区二区| www.五月天婷婷| 色级婷婷| 在线播放 精品| 久久婷婷五月综合色天| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 开心久久xxx色| 99热这只有| 丁香五月激情站| 激情五月天综合网站网站网站| 激情综合五月天| WWW,五月天| 五月婷婷网五月在线| 天天日天天干天天插天天射| 亚州色色色| 中文字幕AV网址| 精品久久久人妻| 黄急一级视频| 婷婷五月天综合AV| 99热免费网站| 熟女激情五月天| 九色PORNY自拍成人精彩视频| 丁香五月天啪啪| 无码成人AAAAA毛片AI换脸| 五月色激情综合网| 久久婷婷五月国产激情综合片| 思思网站| 色很久综合| 第四色首页| 五月激情四射网站| 五月婷在线影院| 亚洲色色色色| 天天日日夜夜| 日韩成人电影在线播放| 色五月aV| 欧美成人精品A片免费一区99| 91色综合久久| 怡红院99| 天天操天天操天天操天天操天天操| 一本色综合色| 久久这里都是精品免费| 五月婷婷六月丁香综合在线| 少妇熟女视频一区二区三区| 91九色视频| 亚洲视频伍月婷婷| 91日韩在线| 日韩99视频| 九九热99热| 婷婷五月综合在线| 婷婷欧美综合| 伊人玖玖精品| 日韩高清久久| 婷婷五月天狠狠| 五月天激情网站| 综合色图区| 色婷婷免费观看| 操比激情五月综合| 五月丁香婷婷婷激情爱爱| 五月丁香婷婷色啪| 丁香五月六月欧美| 综合狠久久| 婷婷夜夜夜夜| 97人人操人人插| www.日日日.com| 国产精品扒开腿做爽爽爽A片唱戏| 五月开心婷婷网| 狠狠色色| 99热这里只有精品热| 日本4399天堂中出| 亚洲va欧洲va国产va不卡| 狠狠色色综合| 无码色| 综合激情五月丁香| 日韩小视频在线99| 人人爽天天爽| 另类视频在线| 婷婷热色| 丁香激情五月天| 超碰国产在线观看| 玖玖婷婷五月天| 久色网| 久噜久噜| 丁香六月久久| 怡春院天天干| 九九99精品| 日本久久爱| 久99久在线| 日韩乱轮AV| 五月婷在线| 日韩婷婷五月| AV免费在线网站| 日本婷婷| 成人丁香五月| 色婷婷五月天成人网| 99re视频在线| 无码激情AAAAA片-区区| 99热亚洲精品| 九九精品在线观看视频6| 丁香五月欧美色综合| 色五月激情五月| 亚洲天堂热| av性爱在线| 国产在线6| 久久激情五月天| 日韩成人精品中文字幕电影| 丁香五月婷婷基地| 色婷婷久久久| 五月天婷综合| 色婷婷www| 六月婷婷狠狠色在线观看| 97香蕉人人在线观看| 色综合久久久无码中文字幕999| 日本色99| 婷婷丁香六月天| 久9视频| 日本va欧美va国产激情| 99九九久久| 国产亚洲在线观看| 四LLL少妇BBBB槡BBBB| 99网| 男人操女人高潮91视频| 粉嫩AV久久一区二区三区| 九九色色| 91精品国产综合久久蜜芽解析速度| www.久99| 青吴乐视频| 日韩AV中文字幕在线| 影音先锋91| 五月激情啪啪| 婷婷丁香激情五月| 华人在线免费| 久久总和99| 五月天综合视频| 大香伊人久色| 五月丁香久人妻中文| 婷婷色激情网| 五月婷婷六月丁| 婷婷五月天第四色| 五月天婷婷视频| 久久caop| 精品成人久久久久久久_一二三四视| 大香蕉五月丁香| 99色热视频| 棕合影院色色| 亚洲成人AV高清字幕| 六月婷婷最新网址| 伦99热| 在线观看的av| 中国无码av| 日本精品99网站| 亚洲综合婷婷六月丁香五月| 五月丁香啪啪综合| 久婷自拍视频| 人人操人av| 在线播放成人网站| 欧美在线干| 丁香九月综合激情| 丁香深五月婷婷| 99视频久久免费视频| 丁香桃色网| 亚洲第一成人无码A片| 91性人人| 精品免费99| 国产毛多水多女人A片| www狠狠com| www,五月天激情| 亚洲国产黄色电影| 久久黄色片| 99精彩视频在线观看| 亚洲精品性色| 丁香五月之久操视频| 激情五月天啪啪| 香蕉综合网| 久久这里只有精品无码| 丁香五月花| 五月天涩涩| 99精品自拍视频| 午夜精品久久久久久久爽| 激情色色色| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | 婷婷丁香五月天哟啪| 任你艹| 狠狠草综合网| 激情五月综合久久| 五月婷婷影院| 亚洲色色图片| 91久久久久| 欧美视频五区| 狠狠va| 久草网大香视频| 五月天久久综合| 丁香无五月网| 色综合播放| 久久狠狠干| 5月丁香六月婷婷| 婷婷激情六月综合| 9热网站| 丁香五月婷婷在线观看| 91啪啪| 大香蕉AV电影在线| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 久久婷婷网| 精品动漫 无码av| 色色日本| 亚洲丁香五月在线观看| 久久99看免费| 激情五月婷婷色色| 天天插综合| 99碰超| 五月WWW| 99色婷婷视频| 国产精品黑丝| 91久久久久久| 中文字幕日产A片在线看| 婷婷五月丁香伊人| 色播五月丁香综合| 激情婷婷五月少妇| 粉嫩AV久久一区二区三区| 99色精品| 欧美久久婷婷| 亚洲视频在线观看99| 69色婷婷| 九月丁香婷婷基地| 9 9热这里有精品| 色婷婷中文| 99精品久久久久久久久| 久久九九色| 久久伦乱| 十一月婷婷激情四射| 26uuu丁香婷婷五月| 亚洲第一视频 久久| 六月婷婷五月丁香首页| 五月丁香欧美综合| 国产五月丁香在线| 色色色欧美| 夜夜爽日日躁| 少妇日麻屄| 激情涩涩网| 爱草视频在线| 在线视频99| 99精品久久| 99热在线播放精品| 91操人| 九九这里只有精品在线视频| 激情五月天色爱| 丝袜激情网| 26uuu最新地址| 五月丁香综合激情网| 日本三级99人妇网站| 色护士综合| 亚洲AV免费国产电影| 久久大香免费| 欧洲一区二区| 久久五月天激情| 婷婷五月天成人网| 亚洲精品无人区| 欧美色色日韩| 九九热99视频| 欧美日韩aaa| www.激情五月| a九九热www| 国产成人99久久亚洲综合精品| 婷婷色播婷婷| 五月婷婷七月丁香| 丁香涩涩爱| 天天色天天| 超碰啪啪网| 日韩成人网址| 激情图片婷婷| 99久久人妻精品无码二区| 亚州色综合| 99免费热在线精品| 91精品婷婷国产综合久久| 日韩成人精品中文字幕| 99噜噜噜在线播放| 天天碰夜夜爽| 99人人看| 天天综合五月天| 嫩草AV久久伊人妇女超级A| 在线免费观看激情视频| 亚洲精品欧洲精品| 99热资源在线| 日韩成人无码片| 婷婷五月天成人娱乐| 色婷婷五月天偷拍| 97色啪| 六月丁香五月天| 亚洲欧洲中文日韩久久AV乱码| 嫩草国产| 九九九九毛片| 玖玖爱综合网| 99综合| 综合激情五月丁香| 人人摸人人搞| 五月婷婷婷婷婷婷艺术| 婷婷五月天色播| 五月天丁香综合| 色五月综合网| 久久精品爱爱| 天天色色天天| 久9视频| 天天搞天天色综合| 九九超日本| 97操碰在线视频| 婷香五月网在线| 天天影院色| 五月丁色AV| 成人综合网站| 天天干天天干天天| 久人操| 99九九视频| 国产精品-第3页-91JQ就要激情网91JQ5.JQJQ926.XYZ | 五月天丁香婷婷网| 亚洲综合色五月| av在线免费播放| 播播网色播播| 97色在线观看视频| 99熟女视频| 色墦五月丁香| 婷婷丁香激情五月天色色| 日韩青青| 五月天激情综合| 免费试看小视频 99| 99在线精品视频| 99思思热只有在这里看| 99免费在线| 中文字幕永久在线| 色婷婷91| 久热久re| 人人操9| 嫩草AV久久伊人妇女超级A| 午夜亚洲国产精品av一区二区| 婷婷五月丁香伊人| 婷婷五月天色综合| 欧美综合在线五月天色婷婷| 久久久久久草黄色片AV在线观看| 7超碰自拍| 色五月天堂| WWW.99热| 综合网亚洲| ji'qi'luan'ren'lun| 国产资源91在线| 欧美精品熟女一区二区| 婷婷激情丁五月| 天天爱天天操| 99精品手机在线视频| 久久五月天婷婷| 五月丁香亚洲婷婷| 深情六月婷婷综合久久| 五月激情射| 男女激情久久| 日韩AC在线免费观看| 国产乱子轮XXX农村| 婷香五月| 一级内射毛片| 蒲京久久无码视频| 伊人九九68| 无码AV免费精品一区二区三区 | 色色影院黄大片| 日韩AV在线电影| 伊人无码高清| 亚洲激情AV| 激情五月天综合| 天天爽天天操| 久久xx| 超碰免费观看| seav天堂| 色99日韩| 99热最新网址| 九九热视频思思| 中文字幕AV在线| 欧亚成人A片一区二区| 九月婷婷在线观看| 99这里有精品久久97| 亚洲丁香五月在线观看| 色五月综合激情| 99色亚洲| 天天干,天天操,天天射| 99久久国产宗和精品1上映| 婷婷婷婷婷开心无码播放| 九九在线精品| 婷婷久久五月| 探花搜索结果 - 黄上黄| 激情五月激情综合俺也去婷婷小说 | 99热热这里只精品996小说| 久久激情天堂| 丁香九色不卡aaa| 丁香五月婷婷姐| 成人丁香婷婷五月天| 色99色| 在线播放 精品| 久久九九免费大视频| 亚洲成人AV在线观看| 无码人妻丰满熟妇奶水区码 | 免费成人中文字幕| 91超碰人人操| 日韩小视频在线99| 97热精品| 亚洲午夜成人av电影网| 婷婷久久国产视频| 激情婷婷五月天| 久久中文人妻系列| ji'qi'luan'ren'lun| 天堂久热| 精a品a| 99视频在线观看地址| 夜夜久久综合网| 色999;丁香五月| 婷婷丁香激情五月天色色色| 激情综合网址| 少妇达人正片在线播放_ikun_福利吧| 久99视频| 大香蕉网站,大香蕉综合| 五月丁香黄色视频| 99啪99| 日本五月天婷婷丁香| 欧美日韩中文国产一区发布| 五月丁香婷婷色| 亚洲婷婷五月| 99er6免费视频热播| 五月丁香六月激情| 这里只有视频精品| 99热这里有精力| 色。 日日日| 日本久久精品| 五月婷伊人| 免费操超碰| 无码色| 十月丁香婷婷| 免费观看2018www黄色操逼网站| 六月丁香综合999| 电影91久久久| 五月停停丁香| 99久高清视频| 丁香综合婷婷五月天| 青青色com久久| 无码色| 人人草人| 99er6| 91人人操| 婷婷丁香六月天| 狠狠色性| 九九偷拍网| 五月婷视频| 夜夜操夜夜姧| 97超碰9久热婷婷热| 激情五月天小说网| 色婷婷五月天天天做| 99燥99日| 五月丁香激情综合啪啪| 激情五月婷在线精品| 91在线日本| 99热精品中文字幕| 丁香五月激情视频| 超碰色女人| 99精品手机在线视频| 91丨九色丨熟女高潮| 丁香 亚洲 久久| 人草人人| 操操操AV| 色久激情在线| www.亚洲激情| 就去涩涩丁香五月天| WWW.桔色成人.COM入口| 五月色丁香综合| 激情五月婷婷啪啪| 久青草影院| 无码人妻少妇色欲AV一区二区| 五月天激情小说网| 成人婷婷深爱综合网| 人人色性网| av国产精品偷| 婷婷久久五月天中文字幕在线观看| 九九色逼| 人人操AV| 色和综合网| 色综合网页| 色综色网| 亚洲精品成人片在线播| 亚州婷婷五月激情综合| 熟女人妻视频| 婷婷丁香五月天色色| A片女女女女女女BBBB| 丁香激情网| 丁香五月激情啪啪综合| 狠狠色婷婷7777久综合| 亚洲熟妇AV乱码在线观看| 丁香婷婷老熟女综合网| 无遮羞AV| 草婷婷在线| 日韩操| 草草操操| 天天综合网~91| 99视频在线观看欧| 色,激情五月天| 五月天成人在线| 婷婷五月天你懂的| 丁香五月亭亭六月综合激情网| 丁香五月婷婷俺也要去| 久99热| 五月丁香激情综合网官网| 五月伊人网| 97色色色色色| 午夜69成人做爰视频| 九月色婷婷综合| 五月天综合区| 婷婷综合激情| 91综合在线视频| 中文字幕婷婷五月天在线观看| 五月丁香六月婷婷网| 久久aaaaa| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 91人人操人人| 色色AV色色色东莞| 日韩在线看AV| 色色色视频免费无码| 色五月成人| 久综合九| 丁香五月激情五月| 色级婷婷| www久热com| 五月婷婷丁香日韩在线| 五月婷婷色播网| 国产亚洲99久久精品| 婷婷五月丁香综合亚洲 | 婷婷成人视频| 国产精品成人网站| 婷婷五月色情天| 久久天堂色| 丁香在线视频| 日韩 中文 欧美| 六月婷婷激情图片| 亚洲色综合| 色香欲综合| 日本美女天天日天天爽| 色色网站毛片| 五月天激情子轮| 久久综合香蕉国产国产蜜臀AV| 99在线精品免费视频| 无码色综合| 九月丁香亭亭| 综合在线网| 综合色在线| 99热综合网| 中文字幕在线免费观看视频| 99久在线精品99re8| 丁香五月丁香伊人| 五月丁香六月婷婷的女人| Av九九| 99热久久最新地址| 婷婷伊人五月丁香天堂网| 九九色人| 99爱免费视频在线观看| 日韩99视频| 欧美婷婷| 五月婷婷六月丁香在线视频| 影院久久久| 激情综合无码| 丁香久色| 97国产精品女人碰碰| 99无码黄色视频| 久久五月丁香六月婷| 婷婷香蕉香| 午夜免费试看| 午夜电影网VA内射| 91日本在线观看| 伊久大香蕉| 久久综合婷婷| 五月丁香777| 五月香蕉婷婷| 99欧州偷拍视频| 久久色大香蕉| 色色网站在线| www.99热在线| 狠狠操狠狠做| 色国产五月| 九月婷婷久久久| 天堂网亚洲色图| 五月婷婷六月激情| 国产亚洲99久久精品| 六九色综合婷婷五月天| 五月激情偷拍婷婷| 俺也去婷婷五月天第五色| 大香蕉人在线65| 五月婷婷综合色啪首页| 少妇高潮呻吟A片免费看软件| 99热爱爱干干日| 激情五月婷| 第五色色色婷婷| 久久久五月四色| 婷婷六月天亚州| 最新亚洲色色网| 五月天久久成人| 亚洲性色XXXXX| 亚洲午夜精品久久久久久人妖| 大香蕉久久婷婷精品综合| 蜜乳人妻一区二区三区| 亚洲午夜国产成人电影VA国产欧…| 婷婷五月天成人网| 九九碰九九爱97| 激情五月天视频| 99热国产免费| 播播网色播播| 99热在线播放| 610018岁成人视频| 日韩艹比| 99热九九九九| 任你搞在线观看视频| 超碰99热在线观看| 99色久| 中文字幕在线日亚州9| wuyuedingxiang99| 91人妻视频| 日日爱激情| 国产67194| 婷婷久久综合| 九九综合网| 99在线观看| 五月丁香色婷婷综合| 婷婷色情五月| 欧美日朝成人| 日本V在线观看不卡视频网站| 色色婷婷婷丁香五月天| 婷婷91| 这里只有精品视频一区| 色五月婷婷91| 亚洲精品又粗又大又爽A片 | 成人免费视频一区| 另类的婷婷| 五月丁香六月激情| 五月丁香影院| 久久视频婷婷| 九九热短视频在线观看| 色五月色五天色情网| 色婷婷香蕉在线| 日日爱678| 激情综合五| 91碰免费视频| .操區COm| 精品激情| 久婷自拍视频| 深爱五月亚洲| 色婷婷综合网站| 9l视频自拍9l视频自拍九色学生| 激情综合激情五月| 欧美va在线| 国产av基地| 中文av网| WWW.五月com| 婷婷五月六月丁香综合| 疯狂做受XXXX高潮A片| wWwCom夜操wwW| 亚洲无码播放| 色色激情网| 亚洲欧美婷婷五月色综合| 色99免费视频中文| 99热思思| 色婷婷偷拍| 九九人人操| 久热这里只有精品在线观看| 99精品偷自拍| 玖久精品视频9| 色就色94欧美setu| 婷婷色五月丁香六月欧美啪| 五月天婷婷激情四射综合| 狠狠色激情综合| Aaa久久| 淑女丝袜bi操逼123| 免费播放片大片| 丁香五月婷婷影院| 99热国产这里只有| A片天天| www.色婷婷| 五月丁香久人妻中文| 欧美色五月| 五月天社区狠狠| 在线观看av网站| 天天插天天爽| 五月综合精品| 97色永久免费视频| 欧美激情五月天| 色婷婷五月天在线| 日韩 中文 欧美| 亚洲人妻av伦理| 思思热视频在线观看| 日韩人妻在线观看| 99操碰| 久久五月婷综合网| 91丨九色丨老农村| 五月天婷婷久久| 玖玖婷婷五月天| 人人人人人人人人人草| 久久思思99| 国产午夜伦鲁鲁| 在线成人网站| 国产精品香蕉| 99热99ai| 国产97色在线 | 日韩| 亚洲精品V天堂中文字幕| 婷丁香五月天| 国产色五月| 婷婷五月天激情四射五月天激情| 97人人妻人人艹| 天天插天天爱| 99∨VTV| 日本在线噜噜| 色欲人妻综合aaaaaaaa网| 99热99在线精品| 激情涩播| 天天综合色| www.久久| 任你搞网站| 精品人妻一区二区三区四区不卡在| 亚洲国产色婷婷| 99热亚洲精品| 免费成片在线观看| 色狠狠婷婷| 少妇性BBB搡BBB爽爽爽视頻| 狠狠人妻色综合| 久久久久久99日本| 91在线操| 国产精品人成A片一区二区| 亚洲中文av| 日本三级大片| 99久视频| 丁香五月天AV在线 | 色五月琪琪| av九九| 色五月婷婷五月天| 99噜噜噜在线播放| Www.se.久久| 亚洲超级碰| 玖玖在线视频| 色五月视频无码播放| 深夜A片| caop在线视频| 专区无日本视频高清8| 国av网| 97婷婷狠狠| 国产日日夜夜操| 思思热精品在线| 另类视频五月天| 久久ri精品视频| 色狠狠色| 99re在线这里只有精品视频首页| 无码地址| 99热网站| 99热亚洲| www色综合亚洲92| 99久久婷婷精品视频| 色色性爱视频| 丁香五月天堂| 久久草中文日韩欧美| 色99在线| 99热这里有精品| 99综合视频| 亚洲综合狠狠艹| 婷婷五月天首页| 久久五月婷天天干| 婷婷五月天在线观看第二页| 天天综合.com| 久久婷婷在线| 51avj视频大全| 色欲久久久久久综合网综合网| 狠狠色噜噜| 操骚货在线| 99热最新| 亚洲精品又粗又大又爽A片| 99啪视频在线观看| WWW.久久久久久久久久久久久| 色色综合院| 五月丁香久久综合| 大香蕉久艹| 在线色婷婷| WWW.天天日| 99精品福利视频| 97色色综合| 91狠狠色| 亚洲中字AV电影在线网站| 久久亭亭电影| 欧洲亚洲免费视频9| 九九成人高清视频| 九九色综合视频| 婷婷国产成人| 91色噜噜狠狠狠狠色综合| 麻豆雪千夏| 婷婷五月在线观看| 婷婷五月五月丁香| 97色欧美| 99免费热视频在线| 亚洲9久久精品| 亚洲色视频| 永久无码色| WWW.99热| 福利视频在线播放| 超碰人妻在线| 久久er九九| 五月亭亭开心网| 久久婷狠狠色| 亚洲成人超碰| 超碰在线综合| 99免费在线视频| 日韩 mm 不卡| 色情婷婷五月天| 亚洲免费电影2| 久久人妻www| 丁香五月伊人| 91久久婷婷人人澡草| 亚洲99精品九九在线| 99色热综合| 五月天婷婷偷拍| 开心五月深爱激情| 一区操| 五月天另类小说|