国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

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 個文件以 12 個 dll 依賴庫為主另有 2 個 cs 源碼與 1 個 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這個場景我見過不止一次。換個角度看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)目如果你只是偶爾手動改個表那確實(shí)沒必要上它。2. 技術(shù)選型與工程結(jié)構(gòu)HSSF、XSSF、SXSSF 三套模型怎么分工打開 NPOI 的命名空間會看到一堆HSSF開頭的類第一反應(yīng)通常是“這不是 Java 那套的翻版嗎”。確實(shí)接口模型沿用了IWorkbook/ISheet/IRow/ICell這層抽象好處是同一份業(yè)務(wù)代碼換個實(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ì)行、頁腳匯總要么放最后寫要么在窗口還沒刷出去之前處理掉。這個限制踩過一次就記住了。還有一個反直覺的點(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/ # 命令行入口跑兩個示例 │ │ └── 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;。這么做有兩個直接好處單測里傳一個MemoryStream就能跑完整鏈路不落盤Web 上傳場景拿到IFormFile.OpenReadStream()可以直接喂進(jìn)去不用先存臨時(shí)文件再刪。samples目錄的作用容易被低估。.xls和.xlsx在單元格類型、日期序列號、公式緩存上的行為并不完全一致光靠猜沒用必須有一份真實(shí)的舊格式文件反復(fù)驗(yàn)證。templates目錄則是給“模板填充”這種需求準(zhǔn)備的——表頭、樣式、合并單元格都在模板里做好代碼只負(fù)責(zé)往里塞數(shù)據(jù)行改樣式的時(shí)候不用改代碼。3. 從零跑通裝包、寫第一個 xlsx、再讀回 xls這一章的操作照著敲就能跑起來目標(biāo)是把“寫出去”和“讀進(jìn)來”這兩條鏈路都走通一遍中間不留黑匣子。3.1 建工程與引包# 建解決方案和兩個項(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這里面幾個參數(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 會順帶拉一個壓縮庫發(fā)布的時(shí)候別只拷了NPOI.dll就以為完事了缺依賴的報(bào)錯信息通常很含糊只說“未能加載文件或程序集”排查起來全靠猜。提示目標(biāo)框架選net8.0還是netstandard2.0取決于調(diào)用方。庫給多個項(xiàng)目共用就選netstandard2.0純新項(xiàng)目選net8.0能用上Span之類的新 API。3.2 寫出第一個 .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 個字符寬度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 個字符或含[]:*?/\會直接拋異常。CreateCell(i)的索引從 0 開始跳著創(chuàng)建也允許比如只創(chuàng)建第 0 和第 5 個中間的空單元格讀回來是CellType.Blank。金額這一行是關(guān)鍵SetCellValue(1280.50)存的是數(shù)值Excel 里能參與求和如果圖省事寫成SetCellValue(1280.50)存的是文本Excel 會在左上角給你標(biāo)個綠色小三角用戶一點(diǎn)“轉(zhuǎn)換為數(shù)字”全部格式又亂掉血淚經(jīng)驗(yàn)。日期同理SetCellValue(DateTime)會把它轉(zhuǎn)成序列號存儲顯示格式由單元格樣式的DataFormat決定不設(shè)樣式就是默認(rèn)的日期顯示。最后workbook.Write(fs)這個重載在不同版本上行為有差異有的會把流關(guān)掉有的不會。不確定的話就在Write之后立刻fs.Flush()并且不要指望后面還能繼續(xù)往這個流里寫東西。3.3 用 WorkbookFactory 統(tǒng)一讀 .xls 和 .xlsx讀這邊最容易犯的錯是寫死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ù)用的東西。示例里那幾個方法寫短是因?yàn)榘阉锌佣际者M(jìn)了這幾個方法里。4.1 單元格取值CellType 分支一個都不能漏讀 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! 這類錯誤碼還原成可讀文本 return FormulaError.ForInt(cell.ErrorCellValue).String; default: return cell.ToString() ?? string.Empty; } }三個地方值得單獨(dú)講。DateUtil.IsCellDateFormatted(cell)是個靜態(tài)工具方法內(nèi)部讀的是單元格樣式的DataFormat字符串判斷是不是日期/時(shí)間格式比自己寫正則靠譜。CellType.Formula分支里必須先看CachedFormulaResultType—— 公式單元格的StringCellValue只有在緩存結(jié)果是字符串時(shí)才有效緩存是數(shù)字你卻去取字符串拿到的是空串或者直接拋異常這種問題在日志里只表現(xiàn)為“某幾列讀出來是空的”非常難定位。FormulaError.ForInt把0x07這種錯誤碼轉(zhuǎn)成#DIV/0!報(bào)表里帶著錯誤碼有時(shí)候反而是有用的信息別急著當(dāng)成異常吞掉。注意DateCellValue在較新版本里是DateTime?老版本可能是DateTime。如果編譯報(bào)“無法將 DateTime 轉(zhuǎn)換為 DateTime?”說明你手上的版本比較舊去掉?.就行。4.2 樣式復(fù)用ICellStyle 是共享池不是隨手 new 的樣式是 NPOI 里最容易被寫成性能問題的模塊。工作簿內(nèi)部維護(hù)一個樣式池你每CreateCellStyle()一次就多占一個槽位.xls上限大約 4000 個.xlsx大約 64000 個超了直接拋異常而且文件體積會以肉眼可見的速度膨脹——見過一個導(dǎo)出的表 800KB 數(shù)據(jù)配 60MB 樣式就是這么來的。正確做法是做個樣式工廠按 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)一次就占一個樣式槽 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)這些都能直接用格式串本身也是被緩存的同一個串多次調(diào)用返回同一個對象。Money方法用格式串當(dāng)緩存 key是因?yàn)橥粋€工作簿里不同列可能需要不同小數(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這個參數(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)錯會直接截?cái)嘁话偃f條數(shù)據(jù)導(dǎo)出成.xls最后只剩六萬五而且沒有任何提示——這種 bug 上線之后才被發(fā)現(xiàn)返工成本極高。樣式上限則是另一個方向.xls到 4000 就拋InvalidOperationException堆棧里看不到你的業(yè)務(wù)代碼只看到 NPOI 內(nèi)部的Workbook.CreateCellStyle。5. 避坑與排查五個真踩過的問題5.1 日期讀出來是 45000 這樣的整數(shù)現(xiàn)象導(dǎo)入的對賬單里時(shí)間列全是五位數(shù)用戶以為數(shù)據(jù)錯了。 原因CellType.Numeric分支直接NumericCellValue.ToString()沒判斷日期格式。日期在 Excel 里本質(zhì)是從 1900-01-01 起算的天數(shù)45000就是某個真實(shí)日期。 解決取值統(tǒng)一走 4.1 那個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)去了另一種是同一個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所有行和單元格對象都駐留在堆里一個單元格對象幾十字節(jié)五萬行乘二十列就是一千萬個對象。 解決換成SXSSFWorkbook窗口設(shè) 500 左右順手檢查一下是不是在循環(huán)里CreateCellStyle那個也是內(nèi)存大戶。5.4 讀 .xls 報(bào) Invalid header signature現(xiàn)象文件后綴明明是.xlsnew XSSFWorkbook(fs)直接拋異常。 原因一種是用錯了實(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克隆出一個新對象并單獨(dú)緩存別在原對象上改。6. 二次開發(fā)把示例收成一層能復(fù)用的導(dǎo)入導(dǎo)出示例代碼寫到后面你會發(fā)現(xiàn)每個業(yè)務(wù)實(shí)體都在重復(fù)“讀表頭 → 找列 → 轉(zhuǎn)類型”這套動作。我一般會加一個特性加反射的映射層讓業(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; // 可空類型要剝一層Convert.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); }這個測試我建議再補(bǔ)三個邊界樣本一個帶合并單元格的表頭、一個日期列為空的行、一個金額列是公式的表。前兩個驗(yàn)證判空邏輯第三個驗(yàn)證CachedFormulaResultType分支。這三個樣本跑通線上八成的導(dǎo)入投訴基本能提前擋掉。從那以后我每次接 Excel 相關(guān)的需求都會先問清三句話讀進(jìn)來的是什么格式、寫出去給誰用、最大多少行然后才動手寫第一行代碼。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产不卡中文字幕免费avi| 欧美Aⅴ| 少妇色综合| 亚洲日本天堂| juliaann欧美丝袜办公室| yiqicaoav| 精品美女久久久久| www.五月天| 青青草视频久久久久| 亚洲女毛多水多21P| 天天日天天干天天整| 精品91| 国产天美欧美| 免费久久精品麻豆一区二区av| 久久偷偷色综合蜜桃| 亚州精人品大香蕉| 国产日本一区二区三区蜜臀在线观看| 狠狠操狠狠燥| 97超碰人操| 嗯嗯嗯啊啊啊在线免费观看| 开心婷婷五月| 精品一区二区啪啪啪| 五月综合婷婷久久网站| 久久三| 大香蕉黄色一级片免费看| 黄页| 中文AV制服乱伦| 五十路熟女人妻一区二区三区四区五| 疯操AV| 色欲色香天天天综合网www-亚洲综合国| 91在线页| 久久精品国产99国产精品亚洲| 91色艳| 国产无遮挡| 丁香六月啪| 国产67194| 六十路日本| 久久xx| 男人的天堂2018东京热啪啪啪| 久99热| 91久久精品国产| 黄色十八禁网站| 97视频620| 伊人精品视频| 操一对老熟妇爽上天视频| 91色插| 免费A片三p视频| 欧美黑人精品在线播放| 99性爱视频| 色狠狠综合| 欧美日韩狠狠爱| 熟妇熟女亚洲天堂网| 97综合国产精品高潮久久| 好爽免费视频,| 青草精品视频一日本久久久久网站| 啊啊啊啊无码| 人人操人人插 - 百度 - 百度| 国产女人和拘做爰视频| 97视频网站在线观看| 五月丁香啪啪啪| 九一精品牛牛一区二区| 亚洲超碰97| 久久久精品国产亚洲AV无码| 精品久久久九九九孕妇| 四方色播| 女人天堂AV五区在线| 二级毛片| 手机看片1025| 国产中文字幕在线观看| aaaa黄片| 99热精品在线观看| 亚洲av无码成人精品国产| 久久久久久久久久久久久久久久9| 亚洲女人91| 2020中文在线一区二区三区| 伊人97色天使| 天天草天天日| 吉川爱美98堂在线| 乱伦色图网址是多少| 韩国久久97| 好涩综合| 久久久久密| 久久久久久久人妻丝袜| 久久国产99精品72福利 | 99色在线观看| 亚洲男人天堂2017| 97亚洲综合电影| 老司机福利青青草| 欧美亚洲一区二区久久久婷精品大包诱| 黑人粗大V S日韩女优视频| 乱伦3P视频| 乱性AV| 狠狠干综合| 熟妇色99| 精品国产一区二区三区av在线资源| 国产精品禁久久久精品| 日本大片日本一区二区免费高清| 超碰97丝袜| 人人妻人人操人人乐| 色九九九综合| 五月激情在线| 国产亚州精品美女久久久免费| 欧美午夜精品久久久久久超碰| 好吊色综合| 久久久久久9999| www.91色| 久久精品国产亚洲AV片多多| 密臀在线一区尤物| 狠狠色一区二区中文字幕| 乱色视频中文字幕| 久久av色| 试看60秒 爽| 97干色天堂| 白嫩91在线亚洲| 国产精品久久久无码aV去| 欧美一级A片在线看视频性色| 98一区二区精品| 色五月婷婷麻豆在| 亚洲黄色电影| 亚洲AV无码国产精品久久久久| 中文一区二区婷婷视频| 欧美天天综合在线| 9 9精品一区二区三区| 精品网站9999| 亚洲有码视频二区| 欧美日韩性感| 99婷婷一区二区| 99在线精品视频| 91AV国产精品| 色色色综合| 亚洲区 欧美区| 性色av网站| 久久久久中出| 午夜操一操| 影音先锋国产精品| 岛国片国产成人亚洲播放| 色呦呦国产精品免费看| 奇米四色网| 日韩欧美成人大香蕉| 99少妇| 亚州AV无码国产精品| 国产成人精品午夜福利| 福利在线观看一区二区| 亚洲男人天堂视频| 六月激情网| 超碰97欧美| 好淫网一二三视区| 国产中文大片资源中文字幕| av日韩中文字幕| 91AV老熟女视频| 18禁免费视频| 黄色二级片网站| 中文字幕黄色一起草| 在线性黄高清免费视频| 亚洲人妻久久| 亚洲免费97免费| 黄片com.| 欧美日韩人妻精品系列一区二区三区| 开心五月婷婷| 成人小说视频在线精品欧美| 三级网站超变态精品| 亚洲成人日韩小说| 亚洲天堂另类| 人妻天天爽夜夜爽精品2| 欧美日韩在线视频网站| julia ann久久| 岛国片在线观看视频亚洲| 欧美色图欧美| 97日视频| 99操逼| 精品少妇人妻一区二区三区| 久久男女激情视频网站| 91无码西班牙视频在线| 少妇人妻激情四射| 丝袜六区| 亚洲女毛多水多21P| 97av在线观看| 国产女人9999| 欧美日韩人人精品| 97香焦色区| 婷婷丁香九月| 日本大香蕉综合网| 啊啊啊啊啊舒服| 欧美亚洲激情小说| 无码高清国产AV| 熟妇视频一区二区三区在线| 内射黑丝袜| 美女人妻色网站| 欧美日韩中文亚洲v在线综合| 国产内射爽爽大片| 在线一区| 日韩在线97| av中文在线| 国产精品一区午夜福利| 国产操逼视频在线观看| 老鸭窝成人| n1038 一二三区| 国产精品一区二区黄片| HEYZO高无码国产精品227| 99婷婷一区二区| 中文字幕黄色一起草| 久久综合av| 1禁看欧美黄片免费看| av影片在线观看不卡| 91精品婷婷国产综合久久| 天天日天天射天天干| 99成人| A片 AV一级在线播放观看免费| 日韩欧美大片免费高清啪啪| 精品人妻一区二区三区免费视频| 加勒比色综合| 97久久天天综合色天天综合色电影| 午夜免费视频1000| 亚洲九月丁香| 黄色片A级一区二区三区| 亚洲男人电影天堂| 天美91| 快灬快灬 一下爽蜜桃在线观看| 欧美中文字幕一区 | 夜色97| 久久草视频污视频| 久久久久久久六六| 大色网久久| 亚洲一区二区 麻豆传媒| 青青青操| 欧美日韩免费专区在线| 亚洲精品色| 婷婷伊人綜合中文字幕小说| 五月婷婷综合在线| 日产狠狠干| 9 9精品一区二区三区| 免费av大片| 在线欧美69V免费观看视频| 日韩成人性日韩成人性爱视频在线免费观看 | 欧美色日本| 曰本熟女视频| 日本欧美色| 在线黄色污污网站| 免费97视频| 日本黄页视频在线观看| 欧美激情内射| 波多野结衣之双飞调教在线播放| 深夜视频| 91欧洲国产成人久久精品网站| 白丝一区| 99热国产| 日han少妇无码| 国产精品操| 日本在线观看网址| 操逼操逼视频操逼| 婷婷五月在线视频| 1二区9| 舔舔啊| 欧美偷拍| 妇女一区二区三区| 91色人妻| 亚洲超碰在线| 大香蕉色网| 国产AV线| 操一操摸一摸| 一区二区视频在线播放| 99re9在线| 中日韩久久人妻一区二区| 日本不卡一区二区三区| 啊啊啊免费| 强被迫伦姧在线观看无码网站| 91免费看一区二区三区| 色综合五月天| 91美女视频在线免费观看| 国产精品69久久久久久久| 99re视频在线播放青草| 国产亚洲色停停久久99精品91| 手机在线免费看的av| 亚洲精品视频在线播放| 四虎884a| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 国产又粗又又黄又猛| 久久久久久人妻| 日韩激情视频| 国产强奸乱伦无码视频| 91色色色| 亚洲交换| 一本久道在线综合视频| 黑丝少妇麻豆| 欧美中日韩XXXX| 人人摸人人添人人操| 久久大香蕉手机高清| 五十路人妻在线| 亚洲人体视频在线观看| 极品五月天噜噜| 国产乱不卡| 天天摸夜夜添无码小视频| 精品一区二区成人动漫| 欧美日韩国产中文精品字幕自在自线,| 久久精品99| 大香蕉黄色一级片免费看| 久操B网| 2017,超碰| 在线观看成人性爱免费小视频| 欧美一区二区亚洲天堂| 亚州 综合 色图| 永久免费观看的毛片的网站| 狠狠狠狠狠干| 夜夜操夜夜高潮夜夜爽国产精品区| 久久国产逼| 桃色六月天| 免费成人在线熟妇网| 91精品国产一区三一| 女人爽到高潮潮喷18禁网站| 人妻娇喘 激情视频| 精品国产www久久| 久啪| 午夜福利免费精品视频| 美女上床网站| 久久精品99| 高清视频一区| 久久久草成人网站久久久草成人久久久草久久久 | 麻豆激情综合| 午夜无码精品免费看性色| 欧美91网站| 国产精品自拍xxxx| 欧美影音在线| 淫荡少妇免费| 中日韩久久久免费看| 亚洲成人美女无吗| 欧美97网| 亚洲欧洲日韩国产自在线| 男人的天堂在线| 97天天摸天天爽| 欧美日韩高潮喷水91| 毛片一区二区| 亚洲日韩黑丝| 在线天堂999| 亚洲欧美综合区自拍另类| 亚洲色图伊人网| 天天操夜夜嗨| 久操免费观看| 亚洲AV不卡在线观看尤物| 手机在线免费看的av| 欧美色图在线视频少妇| 综合色色网| 私人尤物在线精品不卡| 欧美日韩资源在线| 99日韩| 亚洲本色精品一区二区久久| 久久久久九九九九九| 日本特黄f c2| 久久久久久久久久8888| 九九精品无码专区免费| 中文字幕丰满人妻日本| 日本高清一本二本免费不卡| 色狠狠综合噜一二三区| 日本精品一区二区中文字幕| 69少妇一区二区| 本道在线| 大香蕉色欲AV| 91大神电影天堂| 强奸xx国产| 国产亚洲日韩欧| 69久久久久久久久久久久久| 极品五月天噜噜| 老司机射| 日韩中文字幕人妻视频| 天天射夜夜操| 综合五月天| 麻豆 亚洲 97| 亚洲免费97免费| 大香蕉碰| 97自拍视频在线| 国产AV色黄看到爽| 日韩一级欧美一级国产一级台湾| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 亚洲少妇综合在线播放| 中文字幕精品一区二区精| 超碰美国| 国产肏逼网站| 91香蕉国产尤物视频| 深夜视频| 蜜汁欧美| 东京热,男人的天堂| 久久精品高清无码一区| 色天使AV天堂| 任我爽在线视频免费观看| 伦理弟一页| 欧美在线伊人色| 免费的av网| 亚州操操穴网| 91天天c| 欧美色九九九| 久操 高清| 神马久久网| 91黑丝美女| 情色五月天久久久| 精品一区二区三区蜜桃臀www| 美女的肌被草喷水视频| 亚洲日产专区婷婷| 麻豆色99999| 97资源亚洲| 亚洲综合伊人无码久久| 97色香蕉| 亚洲欧美另类小说| 伊人网在线点播| 精品十八在线观看| 久操免费观看| 国产在线能看的你懂的| 久久久久久久久久久免费精品 | 男人高清无码一区二区| 伊人网青青| 久久男人精品| 99九九久久| 中文字幕在线观看丝袜| 亚洲AV小说| 很黄很污的免费网站| 91精品电影18| 欧美少妇高潮久久91| 97久久精品亚洲中六字幕| 日夜干射色啊| 亚洲精品白丝| 大屁股熟女一区二区三区| 男生通女生屁股| 色天天野狼综合社区| 78精品| 一区二区无码视频| 男女啪啪啪18禁网站| 亚洲密乳AV| 欧美日韩午夜精品一区二区三区| 欧美,日韩综合久久| 人人插人人搞人人操| 日日狠狠久久偷偷色综合免费| 婷婷情色综合网| 欧美91精彩| 91性网| 亚洲图片婷婷五月天| 日本道久久综合色色| julia高潮后不停追击中出| 蜜臀久久99精品久久久久免费观| 九九九九九九九| 国产精品爆乳懂色蜜乳| 亚洲AV免费在线| 丰满精品人妻少妇久久字幕| 男同专区一区二区三区在线| 久久激情亚洲精品无码?V| 水澄无码AV| 国内外毛片在线观看| 美女91网站| 色婷网| 青青草白白色| 日本羞羞的视频在线播放| 综合一区中亚洲国产成人综合精品 | 影音先锋每日最新资源在线观看 | 超碰天天去日穴| 国产日韩区| 成人婷婷丁香| 男人综合网| 黄片aaaaa一区| 欧美在线啊啊啊| 亚洲AO在线| 国产一级高清免费观看| 91国产操逼视频| 欧美日韩成人在线| 伊人网在线点播| 男人的天堂 在线一区| 五月丁香社区婷婷日韩欧美精品影院 | 亚洲精品国产熟女| 一区二区三区网站日日骚| 日韩精品人妻中文字幕不卡乱码| 伊人久久大香线蕉无码| 青青操在线亚洲视频观看欧美在线 | 成人毛片免费| 中文啪啪视频| 欧美 亚洲 在线| 一线黄色免费性爱片| 一区二区三区日韩欧美| 高清无码91| 人妻中文字幕日韩电影| 日韩成人人妻网站| 国产成人精品亚洲日本| 亚洲欧美碰碰| 激情文学网伊人| 91老熟女| 97中文超碰| 一级做受视频免费是看美女| 校园春色欧美色图| 日本成人A片免费看| 中文字幕人妻色偷偷久久皮 | 国产综合操逼高清| 国产精品一区二区三区四区五区| 午夜福利一区二区影院| 超碰97最新人妻| 久操91视频| 九九英色视频| 91足交| 99日视频在线免费| 日韩乱码Av| 成人毛片免费| 秋霞鲁丝午夜无码一区二区三| 狠狠中文字幕| 风韵犹存大大大大香蕉| 综精品久久久aaaa| 久久九九国产精品| 啊v在线观看视频| 久久久av爱| 亚洲无吗在线视频| 久久αⅴ| 日韩精品99999| 草草电影院| 亚洲麻豆18发?| 色婷婷综合网站| 亚洲熟妇一,二,三期| 综合视频91| 狠狠色婷婷| 2023天天操夜夜操| 亚洲男人天堂网站| 中文乱码99| 欧美疯狂做爰xxxx| 中文字幕丰满子伦无码专区在线视频最新 | 国产大片精久久久久久| 日本视频一区二区三区| 天天操天天7| 国产四虎在线| 亚洲超碰在线| AV一区观看| 97在线视频免费看| 精品国产国产AV| 97中文天堂| 日韩丰满熟妇| 欧洲综合无码| 好吊色综合| 情色五月天网| 富二代亚洲精品99 | 熟妇一区,二区,三区。| 九九热免费在线国产视频伊人五月| 亚洲欧美综合区自拍另类| 欧美激情高清性猛交| 人妻系列无码专区中文有码| 综合久久9| 男人的天堂久久狠| 伊人大香蕉在线| 婷婷五月天av| 亚洲人妻在线一区| 日韩黄色片子| 久久婷婷电影网| 熟妇人妻一二三区免费| 97精品97| 97超碰色五月| 欧在线一二区| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 男啪女色黄无遮挡免费观看| 99色在线| 4141514逼喷水三级片| 偷看洗澡一二三区美女| 久久久久九九九| 久久综合国产精品国产| 大学生口爆吞精| 青青草好吊色| 亚洲激情视频| 熟女少妇视频| 夜夜高潮夜夜爽夜夜爱爱一区| 人人摸人人舔一区二区| 国产精品午夜精品| 久久九九精品一区二区| 久久精品视| 91精品婷婷国产综合久久竹菊| 国产白领连续中出在线观看| 婷婷亚洲色| 欧美精品999| 美女超碰978| 怡红院视频在线| 韩国女主播青草福利视频| 日本有码影片下载| 91久青| 国产在线76页| 欧美夜夜狠| 亚洲性爱高潮影院| 天天影视网综合少妇| 亚洲丝袜色| 超碰亚洲97| 日日A∨| 北条麻妃99精品青青久久| 婷婷情色综合网| 欧美久久九九| 99蜜桃臀亚洲成人在线观看| 天天色踪合| 久久超碰av在线| 丝袜美腿91| 亚洲一区二区AV| 国产2.3.4区| 日韩十八禁| 中文字幕精品探花视频| 国产精品区在线12p| 97欧美性爱| 亚洲天堂区| 暖暖精品二区三区观看| 最新av在线| 久久激情视频| 天天射夜夜骑| 免费伦费视频在线观看| 人妻AV在线| 懂色AV中文| 加勒比久久av| 超碰97人妻| 欧美成人一级免费电影| 亚洲老熟妇xxx| 天综合网欧美| 先锋女优在线观看视频| 91一区二区三区蜜桃| 97摸视频| 大香蕉在线视频15| 国产AV人人 夜夜人人澡| 东京热99999| 日韩字幕一区| 99只有精品| 久偷拍欧美日韩三区| 日韩人妻无码不卡网站| 九月激情婷婷| 最新日韩黄片| 少妇三P| 无码国产精品96久久久久孕妇| 国产日韩区| 青青草在线成人视频| 茄子社区国产精品| 午夜乱轮操逼视频免费看| 黑操B| 蜜臀99久久精品久久久久久| 一级做a爰片性色毛片久久| 国产情侣自拍在线播放| 传媒免费一区二区三区| 日韩视频中文字幕| 99综合视频| 久久r精品| 国产性爱在线视频一区二区| 欧美色图偷拍另类| 玖草在线视频| 日韩精品亚洲专区在线影视| 丝袜综合| 日本一级真人黄色性爱视频| 国产67194| 天天日日日射| 九九碰九九爱97超| 伊人成人中文字幕久久网| 夜夜高潮夜夜爽高清视频一| 91伊人| 亚洲成人久久美女| 丝袜色综合| 性爱乱伦视频免费| 亚洲 欧美 另类 日韩 人妻一区| 91精品人| 日韩成人性爱电影在线播放| 强奸乱伦亚洲第一页| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒| 熟妇国产免费一区| 强奸乱伦大香蕉| 欧美亚州色的图| 熟女这里只有精品6| 精品国产72| 操B视频日韩无码| 欧美熟妇乱码在线一区| 成人一二三区| 天天爱天天韩国日本牛牛牛牛 | 男人把坤坤插入女人的下体| 国产免费操逼| 色五月激情AV在线| 免费看A片毛毛片在线播| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 久久亚洲天堂| AV九九| se..亚洲欧美| 蜜臀久久99精品久久久久免费观| 9色国产精品一区粉嫩| 综合天天网| 国产小视频91| 91女日逼| 97色论| 大黄片做爱的大的| 99草精| 日韩在线视频1234| 狠狠操,使劲操| 亚洲日韩东京热一区| 欧美久久伊人| 欧美人体性爱互联网第一页婷婷日本| 五月天婷婷欧美三区| 久久老熟女| 91肉丝| 麻豆九九九| A V视频日本| 怡红院久久老司机| 国产亲戚伦亲在线| aa片毛片| 九九九九一级| 69人妻精品一区二区绯色| 秋霞免费无码视频日韩A片| 久久久久9999妇女| 婷婷91| 在线天堂资源亚洲| 五月天婷婷成人网| 大黄片做爱的大的| 国产丁香精品露脸视频| 天天看片天天爽| 国产午夜精品理论片一二三区区 | 亚洲网站一区二区在线| 日韩欧美偷拍美女视频| 五月丁香综合啪啪| 男女猛烈无遮掩视频免费软件| 久9久精品视频| 婷婷色婷婷| 99re热有精品视频国产| 中文字幕青青草| 欧亚第一综合网| 成人欧美一区二区三区黑人一| 亚洲欧洲无码bt精品合集| 蜜桃香蕉久草精品在线| 精品伊人久久久大香线蕉小说| 一起草三级AV电影在线观看 | 亚洲色交| 试看60秒| 天天干2019| 国产精品点击进入在线影院| 大香蕉草草| 激情文学小说一区二区| 欧美精品91| 丁香五月av| 国产强奸超碰AV| 亚洲高清无毛一区二区| 欧美97色| 青青青草原| 精品然女一区二区| 97九色人妻| 99老司机精品视频在线观看| 蜜臀久久99精品久久久久久无删减 | 亚洲成人久久美女| 国产69精品久久久久99尤物| 少妇熟女1区2区3区| 欧美宗合色| 精品精品精品| 日韩国语字幕| 九色视频91| 家庭乱伦网站国产| 亚洲av性爱电影| 啊啊啊啊啊啊啊啊在线观看| 久久超碰天天| 91欧美丝袜| 天天综合网1| 在线综合 亚洲 欧美中文字幕 | 国产最新小视频在线播放下载 | 午夜精品久久久久久久99热影院 | 国产丝袜欧美在线视频| 精品无码久久| 久久激情视频| #NAME?| 91nbbbbbb| 91五月天| 熟妇人妻一区二区三区| 人人操AV| 999在线电影香蕉| 久久久久久人妻| 五月天婷婷基地| 狼天天狼天天大香蕉| 中亚精品极乱| 成人精品电影| AA丁香综合激情| 99激情视频| 欧美成人9797| 不卡九肏| 欧美一区二区成人一卡| 午夜欧美神马久久久久| 91欧美丨精品丨入口| 久久成人精品| 99999国产| 97免费在线视频| 国内精品a| 黄色一区二区秘书性感| 婷婷五月天激情网| 1024人妻| 91在线免费观看处女| 九九热免费在线国产视频伊人五月| 中文字幕 av v| 亚洲天堂另类美腿| 日韩人妻精品中文字幕| 97精品网站| 思思热一热婷婷热一热| 国产蜜臀精品一区二区尤物| 丁香九月婷婷| 国产无码高清操逼视频| 欧美系列在线一区二区| 91蜜桃婷婷狠狠久久综合9色| 性色一线| 99这里都是精品| 97久久国产| 嫩草美女久久| 黄片免费看的| 色色国产| 色欲人妻一区二区在线| 国产吹潮女在线观看| 亚洲欧美91| 中国农村熟妇毛片视频| 国产福利精品最新在线| 97综合在线观看| 小电影欧美91| 91综合中文字幕| 中国一级操逼视频| 欧美熟女少妇| 加勒比AV天堂| 亚洲国产成人综合碰碰三级经典| 久久精品人人做人人看| 欧美性爱系列| 台湾大香蕉99热| 久久激情四射婷婷丁香五月天| 富女玩鸭子一级毛片| 色青青久久影视| 狼人久草| 91丝袜在线视频| 超碰91在线| 白丝av| 国产一级αv免费看片| 婷婷三区| 久9爱精品| 国产一区二区三区免费视频在性观看 | 热久久国产| 激激五月| 天天做天天爱| 日本精品第一视频在'| 97超碰天天| 国产自制av蜜乳| 精品久热| 蜜臀无码一区二区| 人妻精品一区二区三区| 国产小黄片在线免费观看| 在线天堂999| 96久久久久久久| 天天操天天舔| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 精品久| 天堂中文日本在线观看| 一区二区三区蜜桃成人撸久久东京热| 久久女人| 婷婷久久五月| 亚洲色图第四色| 激情黄色片在线观看| 超碰99在线观看| 免看60秒涩涩视频| www黄片免费看com| 一区久久久二区| 亚洲高清视频在线免费观看| 丁香六月天| 免费在线视频97| 伊人久久婷婷| 91久久堂| 日韩亚洲中文有码视频| 久久久熟妇熟女国产| 97无码视频在线播放| 操狠狠| 欧美99999| 麻豆国产av网| 精品日韩人妻视频| 97大色网| 韩国午夜理伦三级好看| 色欧洲97| 在线人人人人人人精品超| 9999九九九久久久| 久久亚洲AV无码专区国产精品| 欧美日韩天堂| 手机看片1024你懂的国产| 天天操熟妇| 婷婷中文字幕| 亚洲另类欧美精品| 天天日天天屌天天操| 精品中文字幕一区二区l - 百度| 97热视频在线观看| 97最新在线播放视频| 岛国天天午夜影院传媒网| 久久肏大逼| 人妻娇喘 激情视频| 射 色综合| 青青草好吊色| 亚洲。日韩。欧美| 久综合国内精品自在自线| 色偷综合| 久7色| 一区二区三区高清天码| 综合干干干av久久久综合网 | 99在线观看| 日韩成人人妻网站| 素人美腿视频网站| 欧美国产精品| 九九操久久国产免费视频| 亚洲精品久| 亚瑟国产精品久久无码| 少妇熟女视频一区二区三区 | 色综合大香蕉| 九九九九九九成人| 亚洲蜜桃V妇女| 午夜超碰| 97资源免费视频| 亚洲日本韩国在线| 久久永久无码人妻视频| 色综合99999| 伊人久久青青草| 在线人人人人人人精品超 | 麻豆综合一区av| 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | 欲色影视综合吧| 欧美人人AAA| 蜜臀无码视频在线观看| 熟女91网| 亚洲狼狼干综合1| 久久精品店| 视频国产欧美在线播放| 桑老女人九区| 啊啊啊啊操死我了| 夜夜操91744565| 再深点灬舒服灬太大了好硬好爽| 五十路三区在线| 97欧美资源| 老女人碰碰在线碰碰视频| 殴美牲| 蜜桃无码AV一区二区| 久久超碰国产一区二区三区| 精品丰满熟妇人妻一区| 欧美 日韩 婷婷 五月| 国产久久一区二区午夜| 探花激情视频| 亚洲导航深夜福利| 亚洲āv网址在线观看| 欧美性暴力猛交| 97日视频| 黑丝少妇麻豆| 色五月激情网| 丁香婷婷久久 | 人人摸人人舔一区二区| 蜜桃中文字日产乱幕4区| 久久色情| 五月婷在线| 久草网站免费在线观看| 操操逼视频| 亚洲国产一级黄色视频| 神马麻豆福利院| 在线视频资源| 欧洲亚洲人妻无码高清久久三区四区| 日韩av电影网站| 亚洲 综合 第一页| 好看的久久不射无码影视影院| 国产农村妇女精品一| 大鸡吧尹人在线| 五月天色图影视| 在线 制服丝袜中出 人妻| 亚洲精品久久久久久久蜜桃臀| 久久久久国产一区二| 欧美一级黄色18片免费看| av网站在线观看了| 懂色av色欲av蜜臀av| 欧 美 自 拍 偷 拍| 91美女视频| 97精品久久| 久久神马| 欧美日韩亚洲天堂| 97色操| 青草精品视频一日本久久久久网站| 色噜噜狠狠色综无码久久| 超碰综合97在线| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 黄久久| 东京热AV男人的天堂| 99色综合| oumeisetupian| AV天堂男人的天堂| 久草精品一区 | 天天综合网91| 欧美激情激情xxxx欧美专区| 黄色视频高清无码网站| 国内亚洲高清无码| 午夜视频好爽啊| 欧美性爱日韩高清| 亚洲中文字幕久久人妻| 青娱乐久久艹| 中文高清一区二区的| 夜夜嗨av午夜成人| 欧美色图在线视频少妇| 老司机福利社视频在线观看| 国产精品久久久亚洲第一牛牛_在线观看| 欧美亚洲图片| 亚洲欧洲综合成人av一区| 免费观看的黄色的网站| www.久久久久| 97舔舔| 1024久久高清视频| 无码人妻丰满熟妇奶水区毛片| 久久久久久9999| 国产精品久久久久久9999| 91热| 超碰九7| 成年人三级黄色片视频| 亚洲av无码国产精品字幕| 国产aⅴ无码片毛片一级网站| 丁香五月色| 欧美性暴力猛交XXXX| 久久噜噜噜精品国产亚洲综合| 狠狠爱大香蕉| 欧美激情专区| 户外裸露刺激视频第一区| 久久久人妻| 激情视频一二三| 亚洲美女精品九九视频| 国产精品 久久久精品一牛| 久久久久久亚洲Av无码精| 少妇3P性爱自拍| 亚洲精品99| 色网1| 国内伊人久久久久久网站视频| {男男暴菊gay无套网站| 色五月婷婷在线| 国产乱码精品久久久久久| 日韩成人小视频| 少妇熟女1区2区3区| 久操com| 乱码熟妇人妻久久久| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 丁香六月啪啪| 97在线观视频免费观看| 欧美96精品在线| 天天天天天天天天天天干美女| 99爱久久视频频| 91制服丝袜| 粉嫩av平台| 青青操青娱乐| 色网亚洲人| 国产精品无套内谢| 国产农村妇女精品一| 97色综合中文网| 日韩不卡毛片Av免费高清| 欧美韩国你懂得在线 | 欧美日韩国产人人| 欧洲性爱无码区| 啊啊啊啊啊在线观看网址 | 91亚洲最新在线| 欧美日韩 强奸乱伦| 大香蕉欧美伊| 99国产女人| 色五月首页| 99re6在线视频精品免费完整版安卓版| 爱妃国产亚洲视频中文字幕| 亚洲国男人的天堂| julia国产在线 | 四虎国产精品永久在线囯在线| 亚洲18禁| 校园春色五月天| 日本久操视频| 亚洲成人ab| 国产粉嫩出水在线播放| 欧美熟女丝袜| 亚洲第一精品在线视频| 国产精品。| 八戒午夜福利理论片| 99re8超碰| 啊啊啊啊在线播放| 免费看A片毛毛片在线播| 欲香欲色天天天综合和网| 91黄站| 大香蕉伊人久久| 91狠狠狠| 九九RE视频在线精品| 欧美啪啪色吧在线| 欧美九9 9 9| 国产精品直播在线观看直播| 色好看av| 欧洲亚洲国产综合在线| 久久做97| 亚洲囯产精品女人久久久| 精品美女少妇一区二区三区| 黑人综合网| 天堂日本亚洲欧美| 欧美日韩啪啪电影| 天堂亚洲精品久久老牛| 亚洲国产午夜真人一级片中文字幕精品黄网站| 蜜桃臀一区二区aV| 99精品久久久久久久婷婷| 熟妇一区,二区,三区。| 九九黄色网| 黄人人操人人操| 亚洲高清男人天堂| 日本狠狠干| 99re免费视频精品全部| 十八禁电影伊人网| 依人大香蕉| 国产9熟妇视频网站| 天天综合精品| 97在线精品观看视频| 亚洲大色鬼| 久久人妻视频网| 亚洲成人在线高清| 天天操天天7| 天天插天天干| 精品国模无码| 国产高清在线自在拍69| 色婷婷基地| 国产日韩色综合| 天天干夜夜操一区二区| 久久久久久久久久久久久9999| 国产性爱在线视频一区二区| 天美久久久久| 中出789在线视频| 毛片电影一区二区三区| 久草精品国产99| 淫穴高潮色图| 欧美高潮在线| 岛国精品视频在线观看 | 激情五月天社区| 久久黄片国产一区二区| 久热精品在线| 精品久久久久久久久久久久 | 蜜桃中文字日产乱幕4区| 日本午夜久久电影| 亚洲AV秘无码一区..| 亚洲日韩欧美一区二区| 四虎影视在线| 欧美成人四级在线播放| 色九久| 99热8| 富二代亚洲精品99| 麻豆啪啪啪视频| 久久亚州精品成人Av无| 唯美清纯 妖精视频| 熟妇国产免费一区| 极品白嫩福利在线| 91丨九色丨国产打屁股| 三级特黄60分钟播放| 欧美激情区| 99色在线| 久草精品热视| 女优免费一区二区永久| 亚洲欧美日韩夜夜| 人妻系列无码专区中文有码| 在线观看一级α片刺激高潮视频| 久久岛国| 亚洲AV色图| 国产精品农村妇女精品| 国产精品久久久久久久久久久久久久久久 | 天操老女人| 久九干| 天美传媒av 在线| 任你爽视频| 青青草丝袜在线视频| 黄色在线网站| 国产视频一区二区三区在线免费观看| 亚洲成人AB| 久草毛片| 五月天婷婷社区| 欧美第一页| 欧美96交| 亚欧美综合| 亚洲色婷婷综合久久一区二区三区| 欧美在线 亚洲| 国产suv精品一区二六| 999熟女精品| 人妻另类| 另类老少妇| 亚洲中字慕不卡| 亚洲成人AB| 欧色网址| 久久无码精品|