欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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 個(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
返回資訊列表
2015好吊操| 九九碰九九爱97| 亚洲色夜| 五月天激情啪啪| 色婷婷偷拍| 97干在线| 婷婷五月色色| 五月丁香六月婷婷国产视频| 婷婷五月色影视先锋| 999九九九久久久99HD| 91一起艹| 婷婷中文无码| 夜夜躁婷婷AV| 激情五月天开心| 五月丁香婷婷网网网网| 黄网免费看| 五月天激情色色| 激情性爱五月天| 色狠狠色综合| 五月婷婷 激情五月| 另类图片激情五月天| 视频在线免费观看欧洲乱码| 国产操B| 五月婷婷色五月| 99热只有这里才是精品| 国产99视频永久免费| 久热九九| 六月色婷婷色| 立川无码av| 美欧成人视频| 色色五月天婷婷丁香| 这里只有精品96| 婷婷综合色图| 婷婷五月电影院| 17.c黄色| 人人色婷婷| 五月天影院| 99久99热| 久热这里只有精品视频6| 五月丁香久久综合| 婷婷五月丁香av网站| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 欧美日韩成人| 国产精品久久久久久久久久| 少妇AB又爽又紧无码网站| 丁香婷婷五月色成人网站| 这里只有免费精品| 日本va欧美va国产激情| 婷婷丁香花五月天| 26uuu欧美| 99热6这里只有精品| 色五月亚洲| 开心激情网在线| 亚洲激情97五月天| 黄色一级影片| 天天操天天操天天操天天操天天操| 玖玖婷婷色五月| 五月激情婷婷在线| 92久久| 91干在线| 97人人射| 97超喷视频在线观看| 丁香深五月婷婷| 97碰碰草| 日韩婷婷| 开心五月婷婷在线视频免费观看| 欧美25p| 66色在线日韩| 久久99网| 97色视频网| 天堂五月婷婷| 激情五月丁香婷婷夜夜操| 人妻AV在线| 久久只有这里精品免费| 99热只有精| 激情五月婷婷丁香综合网| 99爱在线视频观看| 五月婷婷丁香| 亚洲AV电影av| 丁香婷婷五月天校园春色| 欧美日韩大黄| 97五月天| 五月Huangsewang| 色级婷婷| 色婷婷五月丁香在线观看| 九九操综合网| 99热啪啪| 99热第一页| 国产av影片| 五月伊人综合| 99久在线观看| 激情超碰网| 天堂成人久久| 狠狠干五码| 色五月激情| 九九热视频这里只有精品| 成人无码精品1区2区3区免费看| 日韩人人操| 超碰9| 天天干天天日天天插| 五月 婷婷 成人| 一起草无码| 丁香五月婷婷啪啪| 99热免费精品| 激情文学五月丁香六月婷婷| 亚洲熟妇AV乱码在线观看| 大香蕉天堂色| 激情小说之五月| 成人综合视频在线| 99国产97在线,| 久久网日本| 国产精品久久久60086| 丁香五月天亚洲视频| 久久99热这里只有精品| 强伦轩人妻一区二区电影| 亚洲mm色| 免费视频无码| 涩涩五月天综合| 思思热在线| 日日做A爰片久久毛片A片英语| 日韩视频女神99| 美女五月激情| 色五月亚洲| 色五月婷婷影视| 天天看片日日夜夜| 99热18| 成人AV中文字幕| 超碰狠狠色| 桃色五月天| 99在线一区| 五月激情网五月综合网| 婷色五月| 夜夜骑操AV| 五月综合激情| 中文字幕黄色电影网址| www婷婷亚洲| 久热久| 欧美精品A片一区在线观看| 丁香婷婷少妇| 日韩在线看AV| www,婷婷| 日本三级网址| 久久最新色| 久久久噜噜噜操操操| 亚洲综合婷婷五月| 亚洲av电影在线| 色人五月婷婷| 99在线资源视频| 婷婷五月天另类视频| 五月婷婷之综合激情| 久草五月天| 丁香激情五月少妇| 日本99色| 亭亭五月色男人| 欧美日韩成人在线观看| 97人人操人人爽| 久久婷视频| 操操操AV| caop在线视频| 天天日天天插| 色五月影视| 色色网91| 婷婷爱五月天| 久久99色色| 大香伊人久色| 在线观看欧美| 亚洲激情淫网| www99精品亚| 婷婷狠狠操| 人碰91| 性色婷婷| 五月婷婷激情色情网| 久热在线中文字幕色999舞| 色五月婷婷激情五月| A片试看120分钟做受图片| 亚洲久久婷婷| 五月天操逼网| 91se精品国产| 91视频一起草| 99re26视频| 色情成人五月天| 久久婷婷视频| 婷婷六月爽| 九九综合影音先锋| 三十熟女| 综合激情肏逼网| 成人必爱视| 97色在线视频| 日本操逼九九九九58日本操逼| 色原狠狠综合| 99热久久这里只有精品| 99网99热| 人妻久久久久久久久妻久久久久| 婷婷九月狠狠色| 婷婷中文字幕| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 丁五月激情视频免费| 91精品无码| 97人人干| 九月丁香亭亭| 国产午夜精品久久久观看| 99久re热| 亚洲乱码成人| 99久久精| 天天干天干| 9999久久久久| 大香蕉五月| 五月天色婷婷综合| 婷婷综合97| 婷婷播播五月天| 久久精品夜色噜噜亚洲a∨| 色99视频| 五月婷婷啪啪| 超碰国产AV| 五月激情视频网| 99日逼视频| 九月丁香八月婷婷加勒比| 国产激情AV| 人人做人人看人人摸| 色综合久久中文| 成人综合网站| 日韩啪啪视频| 婷婷色五月丁香六月欧美啪| 九九色欲网| 精品色色网| 五月色丁香| 久久婷鲁| 久久五月天激情| 五月婷婷啪啪| 91干| 九九亚洲综合| 免费国产视频| 激情综合网五月| 久久视频在线| 色色免费网战视频| 欧美色欲色欲天天天www| 丁香九月激情| 色三级色三级| 午夜色婷婷| 久久综合播放| 综合99久久天天综合| 久久艹 五月天| 五月丁香777| 亚洲综合另类| 免费观看亚洲AV片| 五月丁香狠狠爱| 久艹大香蕉| 天天综合中文| 五月婷婷色播| 激情五月小说婷婷| 99婷婷| 色五月天在线观看| 99久久婷婷国产综合精品草原| 五月婷婷性爱| 日日夜夜干| 五月丁香| 久久丁香网| 色色色激情网| 久久99jiu9| 久久电影五月天丁香电影| 婷婷五月天99综合网站| 色婷婷精品视频在线播放| 综合色、色综合| 婷婷久久色五月婷婷久久久| 99re视频在线| 亚洲AV成人在线| 激情综合区| 久久东京热婷婷五月| 大香蕉伊人99| 日日夜夜狠狠婷婷色| 久久这里这里有精品免费视频| AV堂狠狠干| 热99国产精品| 99er6热在线观看精品6| 六月丁香中文字幕| 成人精品在线| 99在线免费视频播放| 免费操超碰| 97五月天婷婷综合激情网| 五月丁香色婷婷色| 久热这里有精品视频| 色五月丁香五月激情五月激情| 婷婷色五月综合丁香| 我要色综合五月婷婷| 丁香五月亚洲综合| 综合色色婷婷| 色伦专区97中文字幕| 超碰成人黄色网| 另类国产欧美视频| 99热国品免费| 久久人妻久久| wwwss在线观看| 68热超碰在线| 丁香五月天AV在线| 草逼大片| 婷婷伊人綜合中文字幕小说| Av在线资源| 六月丁香综合| 热99热9| 碰97久久| 曰本久久女| 91精品91久久久中77777久久玖玖九九| 91狠狠色丁香婷婷综合久久| 97色色色色色| 五月婷婷六月色| 成人精品免费在线观看| 天天射夜夜爽| 婷婷激情人妻| 六月婷婷操逼| 丁香激情合作五月| 99色天堂| 丁香婷婷五月人体| 婷婷伊人激情婷婷| 99综合免费视频| 狠狠ri| 五月天综合久久| 色综合综合色| 天堂成人A片永久免费网站| 九九精品热播| 天天激情站| 日日噜噜夜夜狠狠久久丁香六月| 玖玖婷婷视频| 可似看的AV| 丁香五月天激情综合| 99精品网址| 热久久99视频| 亚洲另类电影| 丁香五月六月久久综合 | 九月婷婷久久久| 丁香五月六月婷婷怡红院| 高清无码入口| 婷婷六月色开| 啪色综合| 亚洲xx网| 丁香五月婷婷基地| 丁香五月婷婷高清| 色色色色色色色色色色色色色色,网站| 欧美人妻一区二区| 激情性爱五月天| 丁香五月六月综合激情| 丁香花五月天社区| 婷婷丁香成人五月天| 国产乱妇无乱码大黄AA片| 五月久久婷婷| 99热最新| 丁香六月婷婷激情综合| 五月丁香色婷婷| 超碰成人av| 亚洲激情婷婷| 伊人网啪啪| 日韩三级高清无码| 日本三级毛片| 狼人婷婷综合| 999婷婷综合| 中文在线成人| 九月婷婷久久| 欧美日韩999| 久久99久久99精品免视看婷婷| 五月丁香啪综合| 在线看av| 99精品自拍| 丁香五月在线自慰| 色色色综合网| 综合色五月天| 九一娱乐在线观看视频| 中文av网站| 狠狠色丁香久久婷婷综合五月| 人人射人人高潮| 超碰在线个人观看| 丁香婷婷五月六月久久| www99热| 99热这里全是精品| 丁香五月视频在线观看| 久热精彩视频98| 丁香六月五月天| 丁香花操逼| 九九热最新| 日本九九视频| 六月婷婷激情| 99av视频| 色五月婷婷基地| 丁香色婷婷| 99久久99热| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 大香蕉婷婷| 性色播| 亚洲综合色婷| 色五月大| 色婷婷六月激情| 九九九九精品精| 久久婷婷成人综合色怡春院| 婷婷丁香在线| 久久久精品免费啪啪国| 免费啪啪亚州视频| 第六色在线| AV网在线观看| 国产日韩欧美性爱| 99热在线这里| 五月天婷婷日日爱| 婷五月天| 成人做爰A片免费看视频| 天天情色五月天| 大香蕉人人网| 夜夜嗨一区二区三区直播内容 | 96精品成人无码A片观看金桔| 丁香五月五月婷婷五月天激情四射| 五月婷婷九九久久| 欧美成人AAA片一区国产精品| 亚洲狠狠狠| 97在线刺激| 中文字幕乱码亚洲精品一区| 久久婷丁香五月| 婷婷成人综合免费视频| 国产avapp 网| 色域五月丁香| 九九热AV| 91精品婷婷国产综合久久| 五月丁香成人| 亚洲思思热久| 伊人五月综合网| 99热在线观看| 狠狠色综合网站久久久久| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 五月色亚洲| 欧美性生交XXXXX无码小说 | 99碰视频| 99re久热| 青青草青青草五月天| www.色综合| 婷婷五月天资源| 丁香无月在线观看| 99自拍视频网站| 午夜激情四射影院| 九色综合网| 人人操AV| 色区久久| 五月婷婷色影院| 五月婷婷六月婷| 久久只有这里精品免费| 超碰激情网| 久久五月天丁香花| 免费色婷婷| 少妇高潮A片无套内谢麻豆传| 五月丁香亭亭操逼| 久热超碰91| 精品成人无码A片观看香草视频| 色五月综合激情| 大香蕉伊在| 万月丁香狠狠爱| 成熟妇人A片免费看网站| AAA久久| 成人短视频在线免费观看| 狠色色狠网| 五月婷婷免费视频| 激情综合亚洲色婷婷五月| 国内裸舞二区| 色婷婷五月丁香在线观看| 色丁香五月天射婷婷爱婷婷| 91人妻色色网| www.激情五月天.com| 中文字幕在线日亚洲9| 夜夜躁婷婷AV| 五月丁香婷婷中文| 婷婷丁香久久| Se.婷婷五月天| 思思久久网| 色人久久| 色天天狠狠干| 五月开心深深爱激情综合| 99热777| 激情婷婷六月| 婷婷噜噜| 色呦呦美女| 五月综合丁香婷婷| 五月天久久久| 五月婷婷色| 国产肥白大熟妇BBBB视频| 欧美大片免费播放器| 精品国产一区二区三区四区阿崩| 亚洲av电影网站| 九一九九黄色| 国产熟女一区二区三区五月婷| 7777激情基地| 91啪级电影| 26uuu亚洲精品国产| 激情五月色播五月| 91啪啪视频| 四色五月婷婷| 8050一级网| 91精品丝袜久久久久久久久粉嫩| 日韩成人无码人妻| 少妇久久诱惑视频| 婷婷色六月| 婷婷五月天成人| 日本色色色| 久久婷婷九月国产精品| 免费看成人747474九号视频在线观看| 丁香六月开心| 欧美激情综合色综合| 天天爱天天操| 亚洲妇女熟BBW| 99精品九九| 另类伊人婷婷| 99性感视频| 欧美日韩成人在线网站| 北京熟妇搡BBBB搡BBBB| 97超级碰碰碰| 春色激情第四色| 五月天婷婷激情小说电影| 亚洲黄色影视| 96精品国产综合久久久久久| 久久永久网址| 婷婷情爱五月天6| 九九视频在线| 婷婷的色色五月天| 草婷婷在线| 综激情网| 婷婷五月丁香激情图片 | 人人干人人操人人摸| 丁香五月久久| 伊人久久综合| www.lingjunshare.com| 怡红院视频| Www.se.久久| 九九热视频精品2| 亚洲天堂aaa| 丁香五月五月婷婷| 久久亚洲天堂| 丁香九月婷婷色| 99久久网站| 九九九九中文字幕| 涩涩涩婷婷| 日韩成人AV在线播放| 五月婷婷丁香91| 五月丁香六月色婷婷综合五月天 | 无码人妻电影| 综合www色| 婷婷五月丁香激情色情| 国产激情综合五月久久| 久久伦乱| 99热亚洲| 六月激情网| 六月天六月婷| 狠狠狠狠狠| 日本 欧美在线| 五月丁香在线观看| 丁香五月 无码| 丁香婷婷五色月| 六月婷婷激情| www,五月天com| 丁香九月综合| 91ncm视频| 日本色爽| 激情四射婷婷色色色| 丁香五月综合在线观看| 日韩啪啪视品| 五区毛片七区毛片| AV片在线观看| 日日夜夜爽| 久久久久久久久久久久久久久久一道本| 五月天激情综合网站| 91九色国产| 最新av在线观看| 亚洲美女网Va| 97色天堂| 91Chinese在线| 色狠狠综合网| 九九av| 综合网色| 国产 码在线成人网站| 人人干人人干骚美女| 99热这里只有精品16| 丁香五月婷婷超碰在线| 精品乱码久久久久| 丁香香五月激情免费视频| 色色色99| 婷婷激情五月天亚洲综合| 亚洲V国产V欧美V久久久久久| 人妻内射麻豆视频| 一区二区成人电影免费播放| 五月丁香亚洲婷婷| 91久久电影| 9热精品| 九九久久五月天综合伊人| 丁香六月久久| 婷婷久久夜| 色色综合网www| ji'qi'luan'ren'lun| 激情丁香五月AV| 欧美日本黄色| 美臀自射自家人妻| 五月激情综合婷婷| 久操大| 色5在线| 国产精品18久久久| 激情深爱五月| 97九色| 国产精产国品一二三在观看 | 91ncm视频| 華人性愛AV在線| 久久性爱99国产| 六月综合在线| 99精品在线| 国产真实乱对白精彩| 夜夜操,天天撸| 91色噜噜狠狠狠狠色综合| 天天干天天干天天干天天干天| 天天爽—爽| 九月色婷婷婷| 五月色丁香| 伊人婷婷五月天av| www.色综合| http://www.com久久久精品一区| 综合一区二区三区| 激情婷婷五月黑人| 五月丁香六月激情综合| 丁香婷婷九月在线| 婷婷五月天久久久| 亚洲人妻五月丁香婷婷| 9久久精品| 色色五月婷婷网| 日韩黄黄| 欧美日本不卡黄色片| 91色色色18| 狠狠操.COM| 天天肏高清在线| 国产精品久久久久久久久久| 在线看片av| 五月丁香六月婷婷在线播放| 五月婷婷黄色| 中文字幕精品推荐免费在线观| 九九综合精品| 丁香婷婷社区| 久久96热| 性婷婷| www.97碰碰com| 欧美A A A A A| 五月天综合久久| 色五月丁香五月天| 甈你aaaaa| 综合亚洲色色| 99九九在线| 影音先锋综合网| 免费视频在线观看的网站| av久热| www夜夜| 开心五月婷婷激情网| 九九色逼| 熟女激情网| 色五月开心久久网| 超碰2021| 新激情婷婷| 婷婷97狠狠成人网站| 91五月天| 国产激情综合五月久久| 婷婷人人操| 五月天综合在线观看视频| 狠狠色 综合色区| 丁香色啪综合| 婷婷区日本| 国产99美少妇| 夜夜爽天天| 丁香五月天婷婷在线视频| 中美月韩免费A片| 婷婷久久伊人| www.91婷婷| 久久亚洲天堂| 亚洲免费观看高清完整版AV线| 婷婷激情97| 97婷婷五月丁香| 99热国产在线| 五月天婷婷激情六月久久 | 色玖玖综合| 色青五月天| 婷婷之玖玖| 97干在线看| 丁香五月婷婷99| 色天堂操| 91丨九色丨熟女|新版| 99热综合色图| 91操熟女| 激情精品久久| 79色色免费| 婷婷五月天最新网址| 丁香五月综合激情久久潮喷| 丁香婷婷五月人体| WWW色色色COm| 丁香五月六月久久综合| 婷婷丁香人妻| 五月 婷婷 成人| 天天爽夜爽| 99re在线视频| 久久久久久久人妻| 人人人操 超碰| 九九中文色色| 国产avapp 网| 色色色色色色色综合| 五月天四色房丁香| 狠狠操狠狠操AV| 精品成人在线观看| 色色色热| 99啪视频在线观看| 7超碰自拍| 99惹| 五月六月婷| 91九色精品女同系列| 婷婷五月天成人网| 婷婷激情六月中文| 亚洲视频五区| 99re热视频| 五月激情综合网| 久热这里只有精品6| 九九九激情综合| 午夜日日| 久久6这里只有精品| 五月丁香激情婷婷| 婷婷六月啪啪| 99re久热| 激情美女五月天| 99热这里全是精品| 久热这里| 亚洲一级AV在线免费播放| 色玖玖| 综合色激情| 婷婷激情五月综合| 丁香五月成人自拍| 乱女乱妇熟女熟妇综合网站| 99爱视频在线| 亚洲精品又粗又大又爽A片| a色婷婷| 狠狠狠狠狠狠草| 丁香婷五月天开心六月| 国产日韩精品SUV| 亚洲久久日| 五月丁香婷婷啪啪综合网| 99riAV国产精品视频| 日韩欧美不卡| 五月天激情小说婷婷| 五月丁香六月婷婷姐| 中文成人在线| 网色99| 精品乱码久久久久| 激情操逼婷婷| 第2色五月婷| 91成人电影| 热久91| 亚洲综合干| 五月天激情亚洲| 97干在线看| 婷婷五月天首页| 久久五月综合| 久久久这里都是精品| 99综合网| 四射综合网| 丁香六月无码| 草了bav视频在线观看| 五月综合亚洲色| 97干97色| 婷婷综合色图| 丁香婷婷91在线观看视频| 狠狠色综合久久久久| 天天操天天操天天操| 亚洲午夜av| 久久久婷婷| www色婷婷| 亚洲AV网站在线观看| 岛国av网站| 1024在线观看免费视频| 婷婷深爱五月丁香网| 国产99久久久国产精品免费看| 91久热| 九九碰九九爱97超碰| 久久婷婷五月天激情四射| 天天插综合| 爆乳熟女-区二区三区| 狠狠撸激情综合丁香五月天俺来啦| 思思99热| 婷婷五月天少妇| 五月激情天| 婷婷丁香水多多视频| 亚洲精品久久久久AV无码| 九九热这里精品| 99热精品在线| 国产va在线视频| 少妇高潮A片无套内谢麻豆传| 夜夜涩涩涩| 国产精产国品一二三在观看| WWW五月天| 色五月激情五月| 2w在线视频| 1024欧美看片| 色色a| 久久久久久久久久91| 超碰免费99| 婷婷五月激情网站| 亚洲日本韩国| 99这里是精品| 国产九九一区二区三区| 婷婷五月天奸女| 国产日产成人亚洲欧美国产VA| 99在线免费视频| 婷婷亚洲五月丁香综合在线| 亚洲天堂婷婷| 狠狠狠狠狠| 99热啪啪| 大香蕉在九| 五月婷婷在线免费| 亚洲激情视频在线观看| h在线看免费版在线看| 国色天香伊人狠狠色| 婷婷五月天首页激情| 色哟哟精品| 另类五月婷婷| 久婷婷久草| 99热主页日本| 婷婷五月欧美综合| 狼人伊人干| 色五月激情| 六月婷婷狠狠色在线观看| 伊人在线大香蕉网| 91丨九色丨熟女| 亚洲一色色色色色色色色| 99riAV成人在线视频| 婷婷色片| 第四色婷婷最爱| 在线成人av播放| 人妻久久久久久久 | 婷婷色婷婷| 中文字幕 久久9999| 色激情五月| 婷婷五月天福利| 色在线视频网2025| 思思热久久阴99| 五月丁香在线观看国产| 激情综合区| 丁香五月,激情五月,深爱五月| 任你操精品免费| 97碰碰碰免费公开在线视频| 丁香五月开心亚洲| 五月丁香成人版| 成人视屏在线观看| 99婷五月| 五月婷婷之综合激情| 激情99在线视频| 五五月丁香花激情综合网| 伊人9草在线观看| 成人做爰高潮A片免费视频 | 深爱激情六月天| 色情五月天视频网| 岛国操B不卡在线| 青草青草视频2免费观看| 操人久久| 欧美VA在线| 色婷婷丁香五月天在线视频| 久99热在线观看| 九九九九热99超碰| 99热综合| 91成人品| 五月在线| 丁香五月婷婷激情中文| 梁铮版蜘蛛女在线观看| 久久久久久9| 成人一区在线观看| 婷婷五月丁香第四色超碰在线| 激情五月丁香五月| 五月丁香大相交| 欧洲亚洲精品| 久久亚洲婷婷| www,色中色| 久久激情综合| 人妻射精AV| 欧美日韩91| 久大香蕉| 91视频免费后入强操| 丁香99| 婷婷综合仓库中文| 国产精产国品一二三在观看| 六月婷婷五月天| 久操综合| 色欲天天综合| 激情四射婷婷| 91视频精品99| 色综合大香蕉| 九色91视频| 婷婷五月色综合| 久久久久网站| 久久综合丁香| 中文字幕综合网| 色射影院| 亚洲操逼网| 色色五月天婷婷| 五月丁香啪啪| 五月综合色| 性爱视频久久| 日韩免费视频| 色色色色丁香| Www.久久| 五月丁香婷婷啪啪网| 久久玖玖综合| 伊人婷婷大香蕉| 超碰男人色| 丁香婷婷六月天| 亚洲九九夜夜| 色激情综合狠狠婷婷| 色色色99韩| 丁香五月激情站| 小视频一区 | 激情av| 蜜桃成语时李时珍 免费| 成熟妇人A片免费看网站| 日韩AV免费电影在线播放| 黄色三级毛片中字| 国产色色小草视频| 色噜噜狠狠色综合网| 丁香成人五月天| 777.色色| 日韩色色视频www| 天天色视频| 97在线视频人妻九色| 人人操五月天| 丁香,开心成人,久久| 丁香五月天亚洲综合| 骚五月婷婷| 色婷婷五月影视| 5月丁香六月情| 伊人五月综合网| 久热无码| 综合久久十三| 丁香狠狠色婷婷| 免费色色色| 五月丁香在线看| 亚洲AV网站| 99热在线观看| se99热久久一本| 激情五月天噢美| 人人爱人人添| 亚洲国产成人综合| 无码人妻丰满熟妇奶水区码| 午夜福利8055| 99 热| 天天操夜夜橾| 综合久久99| 丁香婷婷五月天成人| www.精品99| 五月丁香色播| 九九色综合网| yazhoujiqingav| 97人人搞| 成人九九视频| 色婷婷影院| 九九成年视频| 婷婷欧美色| 日本色爽| 三男玩一女三A片| 激情五月综合久久| 色视五月天婷婷| 99在线免费视频| 天天日色情| 色墦五月丁香| 五月亭亭狠狠| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 99综合97| 色色综合成人网| 国产色色视频| 狠狠干最新地址| 日韩成人综合网| 五月天婷婷成人| 欧美性生交XXXXX无码小说| 射区导航| 亚洲激情97五月天| 六月丁香婷| 色丁香五月天| 真实亲子乱子伦高清在线观看| 亚洲中文字幕在线观看| 影视av久久久噜噜噜噜噜三级| 婷婷丁香激情五月天色色| 天天插综合网| 激情四射婷婷| 色亚洲激情| 丁香色婷婷色手机免费在线| 亚洲精品va| 91碰视频| 色色综合激情| 五月婷天天搞视频| 五月天福利影院导航| 色婷婷久久综合久色| VA色婷婷| 久久婷婷五月综合激情国产| 成人丁香婷婷| 北条麻妃伊人| 精品一区二区三区木瓜| 1000部毛片A片免费观看| 九月婷婷久久| 在线中文字幕视频| 亚洲碰碰碰| 五月婷在线| 婷婷五月丁香A∨| 欧美日韩AAA| 日本三级99人妇网站| 五月伊人视频在线看| 日本色婷婷| aaaaaa片| 色玖玖| 侠女刀之记忆电影在线看免费| 精品色| 天天性视频| 五月婷婷六月丁香在线| 色综合色| 五月丁香综合网| 99re熱| 9l视频自拍9l九色成人| 99免费热在线精品| 99爱爱| 五月天婷综合网站| 色五月婷婷在线| 激情网第四色| 婷婷五月激情欧美大胆视频| site:publishdd.com| 伊人狼人干| 五月婷婷天| 丁香五月天婷婷91| 97碰人人操| 91精品婷婷国产综合久久| 99熟女| 婷婷五月天激情文学小说| 五月丁香六月激情综合| 婷婷丁香视频| 婷婷综合天堂| 五月天婷婷视频小说| 1024操逼视频| 久久99网| 亚洲综合婷婷| 丁香9月婷婷| 91要啪| 婷婷五月天成人在线视频| 性无码专区无码| 久热中文字幕在线线观看 | 丁香五月狠狠综合欧美| 欧美五月婷婷综合| 日日操夜夜撸| 免费黄色视频网址| 国产人妻人伦精品一区二区| 情涩婷婷五月天| 激情五月婷婷视频一区二区三区| 97精品自拍| 五月熟妇婷婷久久| 日韩有码一区| 日韩成人无码人妻| 成人婷婷色五月天| 九九色中文| 丁香五月欧美成人| 午夜九九电影| 亚洲成人av在线播放| 99这里只有精| 99热精品6| www.91操| 亚洲日韩成人三级av| 影音先锋天天日| 九热在线这里有精品6| 墨西哥毛片内射精| 久久久婷婷婷| 操熟女成人网| 另类专区在线观看| 国产AV影片| 成人一级片| 六月丁香婷婷尤物| 91精品综合久久婷婷九色| 激情五月激情综合网| 色爱五月天| 99久久久国产大片| αV电影| 成片免费播放| 激情五月婷婷丁香| 久久久久久久综合狠狠综合| 夜夜AVV| 日本猛少妇色XXXXX猛叫| 天天插天天爱| 婷婷涩涩网| 99热综合在线| 日韩中出视频| 丁香九月激情| 9热在线观看| 国产性色蜜乳| 五月丁香综合啪啪| 在线综合91| 国产又爽又猛又粗的视频A片| 99九九玖玖| 日撸夜撸日操| 婷婷色五月婷婷姐妹| 久久婷中文字幕| 在线视频婷婷| 久久激情网| 欧美日比视频| 丁香五月综合在线视频| 婷婷五月色花丁香社区| 天堂综合久久| 91高潮喷水久久久久久久久| 丁香五月电影| 99热国产| 蜜臀99精品| 五月婷婷丁香综合网| 99热这只有| 啪啪啪大香蕉| 99男人的天堂| 久久伊人婷| 色色网站日本91| 亚洲V国产V欧美V久久久久久| 五月亭亭六月天| 婷婷五月色综合| 色色性爱视频| 婷婷综合色播网| www.人人操人人看人人想人人摸 人人人人操,COM | 蜜臀久久99精品久久久久久酒店| 99综合视频| 久久婷婷亚洲| 色婷婷五月在线| 操逼巨乳91| 婷婷六月综合激情| 日夜夜久久| 婷婷五月天第四色| 五月色情网| 天天色五月| 久久五月六月| 性色欲情 网站| 丁香六月综合激情| 丁香五月自拍| 99久在线精品99re8热| 欧美精品99| 久月婷婷| 色五月网址| 欧亚洲在线高清视频| 97精品在线| 五月天激情图片| 99爱爱| 亚洲综人色综网| 婷婷免费精品视频| 五月色情婷婷开心五月天| 色婷婷内射| 五月天a婷婷伊人| 丁香五月狠狠综合欧美| 天天色色婷婷| 五月色网| rr天天操| 97影院一级片| 99综合网| 六月婷婷综合| 九九热青草| av在线免费播放观看| 丁香伊人五月色婷婷五十路| 婷婷色基地在线看| 色色色97| 色射影院| 婷婷亚洲激情在线观看视频| 五月天婷婷激情小说| 国产一二三四五六七八视频| 日本婷婷色日| 996er热| 丁香婷婷久久 | 欧美天堂婷婷日韩| 色婷婷在线影院| 亚洲视频二区| 色色色在线免费视频| 五月天激情婷婷丁香| 五月天色影院| 97超碰综合| 99在线精品免费视频| avh片在线观看| 偷偷操99| 人人草成人视频| 丁香五月天BBw| 五月婷婷草| 午夜色婷婷| www。五月,com| 亚洲综合在线播放| 九九热在视频| 97色色色色色| 久久婷婷六月综合| 久久婷婷五月天激情新地址| 婷婷五月天丁香成人社区| www久| 艾小青av| 99在线热| 五月婷婷色在线| 91人碰| 亚洲99激情| 五月丁香六月欧美综合网站| 日日操日日撸| 五月丁香在线观看国产| 最新色色五月天| 超碰精品手机在线| 九九99热| 国产精品久久久久9999小说| 婷婷丁香社区| 天天上天天爽| 天堂综合久| 欧美大片免费观看| 天堂中文国产| 米奇影视五月天| 狠狠色婷婷| 9久热视频| 五月婷婷六月丁| 激情久久丁香| 超PEN精品在线| 婷婷五月天影院| 天天日天天爱天天噪| www.色综合| 丁香五月AV| 日日肏天天操| 亚州操人在线视频| 99人人看| 激情亚洲五月| 激情综合色网| 日本在线wwww| 五月天婷婷青青| 日本色道视频网站| 一区二区aV电影免费看| www.色婷婷。com| 五月婷久久草| 中文字幕婷婷| 久久婷婷成人综合色怡春院| 色色激情| 人人操97| 天天操天天操天天操天天操天天操| 色婷婷丁香A片区毛片区女人区| 色99热| 丁香五月天在线| 国产AV一区二区三区最新精品| 超碰女人天堂| 五月天婷婷成人网| 色五月美女| 婷婷五月天视频小说| 久久99热这里只有精品| 丁香五月色五月| 精品乱码久久久久| 97日本在线播放| 亚洲爱爱无码婷婷色五月| 婷婷五月天色播| 97视频久久| 色九亚洲| 97碰碰视频| 六月丁香五月天| 欧美日韩一区二区三区四区| 这里只有精品在线播放| 婷婷五月天丁香| 五月开心婷婷中文字幕| 可以直接看的AV| 久九色| 久久精品视频99| 五月丁香亭亭操逼| 超碰a女人的天堂| 欧美操逼天堂| 99精品在线观看视频| 美女91一起草| 亚洲男女激情| 日韩无码人妻一区二区| 久久免片| 久久婷婷五月综合色丁香| 激情五月天婷婷丁香 | 91啪啪网| 99精品一二三四视频| AV色婷婷| 色999五月色| 亚洲精久久| 天天日天天插| 婷婷六月丁香激情综合| 一起草AV入口|