欧美成人午夜精品久久久,国产?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
返回資訊列表
丁香六月激情四射| 丁香五月大香蕉| 激情五月天丁香| 青青青在线视频国产| 99久久99九九99九九九| 亲子乱AV-区二区三区| 人人摸人人| 色色婷| 丁香大香蕉| 激情第四色| 亚洲成人va| 六月丁香婷婷综合狠狠爱夜夜爱| 爆乳熟妇一区二区三区四区| 色色色热| 婷婷五月丁香久久| 99热这里有精品| 久月丁香爱婷婷综合| 色婷婷综合久久| 色噜噜狠狠色综合成人网| 五月天色婷婷激情综合| 丁香五月婷婷啪| 91丨九色丨国产| 亚州操操| 婷婷五月天激情电影小说| 99激情在线| 亚洲情a| 激情爱爱网站| www,com,五月色色| av在线免费网站 | 激情久久久久久久久久| 日韩欧美一级大黄网站| 午夜不卡成人一区二区| 天天色综合色色色色色。| 99久久精彩视频| 国产69久久久欧美黑人A片| 色色五月天丁香婷婷| 成人丁香婷婷五月天| 精品人妻伦九区久久AAA片| 久久精彩视频| 高清无码网址| 性视频久久| 五月天伊人综合| 99热 在线观看| 久久大香蕉同僚| 美女爆乳18禁www久久久久久| 伊人无码高清| 国产成人综合亚洲| 久久婷婷原创视频| 日韩熟女啪啪视频| 极品嫩草| 成人色图情色成人网 www.5b5b5bcom 五月天 | 国产99久久久国产精品免费看| 伊人色综合网| 中文字幕,综合,91| 五月天激情网址| 五月婷婷六月激情| 91九色成人原创视频| 五月丁香综合精品欧美| 亚洲AV无码成人电影| 97在线观视频免费观看| 1024AV视频| 亚洲视频一区| 91热久| 97日日碰碰| 人人摸人人干| 婷婷丁香五月在线观看91| 色婷婷激情| 五月婷婷中文字幕| 日本色五月| 色婷婷97| 婷婷五月天免费99| 天堂五月婷婷| 综合激情啪啪| 性热视频99精品| 色激情五月| 99久re热| 婷婷中文字幕版| 这里只有精品在线播放| www.99热精品| 成人视频网| 婷婷视频在线| 天天干一干| 色五月天在线观看| 天天干在线播放| 日操夜操天天操不卡| 色啪久| 久久久99精品免费观看| 91人人操人人看| 丁香五月香蕉在线| 操操自拍| 久久九九@| 国产毛片精品一区二区色欲黄A片 国产人妻777人伦精品HD | 7777激情基地| 六月合五月婷| 五月婷婷综合网| 五月丁香婷婷成人网| 天天色亚洲| 国产99久久久国产精品免费看| 国精产品一区一区三区免费视频 | www.maotanji.com| 99热久久最新地址| 99爱视频| 久草免费福利视频| 99自拍视频| 亚洲AAA| 久久这里有精品视频在线免费观看| 性色99| 婷婷五月影院| 久久全意婷婷| 中文网AV| 超碰人人操| 99热精品在线播放| 99久久精品色老| 六月婷婷网| www激情五月天| 国产成人网| 国产成人AV不卡| 99碰视频| 婷婷99狠狠躁| 人碰人人人玩91| 91操片| 开心五月激情五月丁香五月婷婷| 久久99综合| 色婷婷第四色| 嫩BBB槡BBBB搡BBBB视频| 五月婷婷丁香大陆免费| OUMEIRIHANCHENGREN| 五月婷在线| 天天爽天天摸| 一二线视频 另类| 日本97在线视频| 操日本人妻视频| 天天射美女| 激情6月| 91中文在线| 婷婷五月综合激情免费视频| 91 九色大美女| 天天操天天日天天爱| 女人天堂 AV| 五月婷婷无码| VA国产在线综合网站| 成人婷99最新| 狠狠操综合| 日本操B视频| 亚洲黄网AV| 伊人久久艹| 五月天成人免费视频| 这里只有精品96| 午夜婷婷| 中文字幕黄色片| 久9无码视频| 五月天色婷婷伊人网| 久久人妻视频| www.爱操com.| 日本三级第一页| 五六月丁香激情视频| 网站免费一站二站| 日日色五月天| 99热超碰人| 爱的综合网| 国产又粗又大又爽又黄| 五月丁香激情在线| 五月天丁香啪啪啪啪| 日日做夜夜爱| 欧美操综合| 啪啪六月婷婷| 激情久久丁香| 婷婷97| 亚洲无码另类| 农村熟妇高潮精品A片| 久这里只有精品99| 丁香五月婷婷图片综合| 99热精品在线免费观看| 葵花AV在线| 成人丁香婷婷| www.超碰在线| 中文字幕网伦射乱中文| 婷婷五月天激情丁香| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 色婷婷av在线观看| 六月丁香婷婷在线波多| 97干视频在线| 丁香五月影院| 五月丁香六月婷婷在线观看| 婷婷色情网| 九九99久久| 丁香五月天激情婷婷丁香六月| 五月天婷婷色综合| 婷婷色欧美激情| 婷婷色一二三区波多野结衣| 日本色色网| 激情com| 亚洲成av人影院| 五月天久久www| 丁香婷婷浪潮AV久久综合| 淑女丝袜bi操逼123| 色五月激情综合| 天天影院色| 亚洲丁香五月综合| 国产精品色婷婷久久久精品| 五月婷婷六月激情| 日日日日操| 在线观看996精品| WWW.99热| 天天综合影院| 91viP在线看| 超碰免费在线| 99热免费精品| va亚洲中文在线| 丁香九月综合激情| 国产肥白大熟妇BBBB视频| 六月丁香社区| 开心六月丁香五月婷婷| 停停五月色宗合| 久草五月天| 操操操操操电影网| 激情丁香淫荡婷婷| 91精品婷婷国产综合久久| 婷婷第六色| 337久久| 久久婷婷啪啪视频| 99热成人在线观看| 婷婷色资源| 99热这里只有精品8| site:901-07.com| 性色综合网| 色婷婷视频在线| 情久久综合五月天| 激情五月天网页| 91精品久久久久久77777| 北京熟妇搡BBBB搡BBBB| 99爱视频在线观看这里只有精品| 激情五月天网| 亚洲欧美一区二区三区四区爱爱动图| 狠狠干五月丁香| 九九热视频精品| 五月中旬婷婷丁香六| 六月婷婷av| 色99最新网址| 777米奇影视第四色| 五月天激情婷婷| 另类激情五月| 精品福利911| 超碰在线人妻| 色综合久久天天综合网| 99热加勒比| 五月停视频天堂| 九九热精品| 另类专区在线| 色播五月婷婷| 久久性爱视频网站| 色色AV色色色东莞| 日本色狠狠| 色婷婷五月婷婷五月婷婷五月| 开心五月婷婷激情| 人妻AV在线| 久久99网| 夜夜爽天天干| 九久9精品| 9l视频自拍9l九色成人| 草草操操| 成人av免费观看| 五月婷婷欧美| 91久久久久久久久18| 在线成人网站| 婷婷五月天社区| 日韩狠狠色| 国产精品久久..4399| 无码动漫av| 色你久久| 婷婷啪啪| 狠狠干思思热| 婷婷五月视屏| 久久狠狠干| 99热只有| 99国产在线| 激情开心五月天| 婷婷五月天激情网| 亚洲欧美成人在线观看| 美女伊人久久| 久久婷婷五月天| 狠狠爱综合网| www.狠狠干com| 五月婷六月丁| 中文字幕精品在线观看| 天天爽天天操| 中文字幕在线人妻| 亚洲综合婷婷| 天天狠狠插| 影音先锋五月天婷婷丁香在线观看| 思思久久99热只有频精品66| 五月婷婷9| 久久码久久无清| 91人人超碰在线| 九色视频91疯狂| 欧美激情综合| 激情五月天色婷婷综合| 亚洲综合草草| 久久er99热精品一区二区| 桔色成人在线| 五月丁香影院| 久久九九Com| 五月香蕉网| 99玖玖免费视频| 99国产小视频2013| 五月天激情亚洲| 九九操操| 婷婷亚州综合| 色婷婷久久综合久色| 五月四色婷婷| 亭亭玉月丁香| 99热热热99精品丁香| 99国产在线精品视频| 夜夜AVV| 五月丁香婷婷综合网| 日本色婷婷综合| 亚洲亚洲永久无码777777| 五月丁香六月在线欧美| 五月花婷婷丁香| 亚洲天堂啪啪| 天天日中文| 超碰在线观看9| 蜜桃婷婷丁香五月天狠狠久久综合| 日日夜夜天天爽| 五月停停999| 国产伦亲子伦亲子视频观看| 玖玖在线| 日本久久爱| 九九综合| 激情综合无码| 婷婷五月色情| WWW.婷婷五月天.COM| 丁香六月激情综合| 六月99天天婷婷激情综合| 色婷婷五月影视| 色色色色色色色色综合网| 欧美婷婷五月丁香| 婷婷色中文| 天天干天天日天天插| 丁香六月综合激情| ...婷婷五月综合不卡,国产在线手机 | 久婷久婷| 五月天色影院| 激情五月婷婷色综合| 丁香五月色色| 色五月婷婷影院| 操操综合网婷婷| ww久久| 夜夜干天天干| 婷婷丁香精品视频在线观看| 中文不卡一二三区| 欧美激情性做爰免费视频| 婷婷综合97| 久久成人人妻| 久9热插入| 五月情综合| PORNY九色9l自拍视频成人| 91传媒无码人妻精| 狠狠干综合网| 亚洲在线成人| 久久机热这里只有精品| 婷婷五月天开心激情网| 五月婷婷激情在线| 天天做天天摸| 亚洲成片在线观看| 久久99网| 色天使色婷婷| 婷综合| 色婷婷瘦婷婷日韩| 婷婷五月天视频| 97男人天堂| 99热99re6国产在线播放| 日本精品久久久久中文字幕| 丁香六月亚洲| 真实的国产乱XXXX在线91| www.狠狠操.con| www.狠狠操| 色婷婷丁香六月| 第四色五月天| 六月婷婷无码观看| 欧美日本不卡黄色片| 五月天sesese| 五月天另类视频| 大香蕉丁香| 99操逼| 五月丁香婷婷99| 丁香五月天中文字幕| 人妻Av在线| 色天天综合| 五月丁香六月停停停| 99爱视频免费看| 99久久精品国产色欲| 操久久精| 日本色五月| 婷婷欧美偷拍综合| 婷婷不卡基地| 久久精品4| 婷婷99狠狠| 激情综合五月婷婷| 日日舔夜夜操| 国产三级片91| 99国产精品久久久久久久久久久| 欧美激情综合五月色丁香| 丁香五月天狠狠操| 精品人妻一区二区三区四区不卡在| 18av天堂| 狠狠久久婷| 久久五月天视频| 午夜婷婷丁香| 婷婷五月丁香性爱| 婷婷五月天成人网| 久久婷婷丁香六月天| 九九热99精品| 亚洲蜜桃精久久久久久久久久久久 | www.91av.com| 丁香蜜臀黄色婷婷五月天| 婷香五月网在线| 黄色片avv| 国产 亚洲 在线| 久久丁香五月天| 亚洲久热无码| 五月丁香六月久久| 天堂五月婷婷| 三级黄色大片视频| 激情五月婷婷丁香| 五月婷天天搞视频| 人妻乱码久久久| 激情玖玖综合网| 五月激情综合网| 六月婷婷色五月| 婷婷五月精品中文字幕| 五月天另类小说久久小说网| 婷婷五月激情丁香| 婷婷久月| 91精品熟女| 9热在线观看| 亚洲精品无AMM毛片| 激情五月综合| 丁香五月激情五月开心五月| 婷婷激情综合无月| 99无码| 草五月| 五月婷婷久久内射| 精品99这里有| 久操大香蕉| 日韩美一级毛卡片| 久久婷婷五月天大香蕉| 婷婷在线视频| 天天干夜夜想| 激情五月丁香五月| 激情婷婷丁香五月天小说| 夜色.cnm| 草榴成人影片| 人妻激情久久| 成人无码髙潮喷水A片| 99视频这里有精品| 色吧五月婷婷| 色五月首页| 丁香五月婷婷亚洲色图| 婷婷五月成人| 久操人妻| 久热伊人| 99久久免费性爱视频`| 黑人熟妇一区二区三区| 日本97久久久精品| 婷婷激情四射五月天| 麻豆观看夏晴子| 精品夜夜澡人妻无码AV| 色婷婷久久| 婷婷开心激情| 色色五月婷| 俺去也五月天| 婷色五月| 少妇真实被内射视频三四区| 欧美成人AAA片一区国产精品| 亚洲五月婷婷| 五月激情影院| 99国产精品久久久久久久久久久| 亚洲婷婷成人五月天| sS丁香五月婷婷| 六月婷婷天天操夜夜爽视频| 性色播| 丁香五月天欧美成人| 亚洲AV成人精品日韩在线播放| 超碰资源在线| 337p大胆噜噜噜噜噜91Av| 伊人婷婷大香蕉| 日韩AV成人电影| 超碰免费电影| 综激情网| 五月在线婷色| 婷婷成人综合五月| 五月天天爽| 激情五月丁香亭亭| 成人精品人妻| 婷婷99狠狠躁天天| 丁香五月色情| 97婷婷五月丁香| 婷婷娌伦网| 亚洲色图五月丁香| 袁子仪视频观看| 襙逼网| 思思热精品在线观看| 久久久久久人妻久久久久久久久久人妻久久久 | 99噜噜噜在线播放| 久久性都花花世界成人免费视频| 久草a片| 日本美女上人| 五月婷婷色播网| 97五月天婷婷| 色五月综合激情| 五月婷在线| AA片在线观看视频在线播放 | 欧美色五月天| 色色色色色色色色网站| 99九九这里有免费视频| 色哟哟精品| 激情网 五月天| 色五月婷婷在线观看| 久超超碰| 99综合色色色| 国产人妻操逼| 婷婷丁香在线播放| 中文字幕 中文字幕明步| 九九日伊人| 久re热视频| 国产五月丁香在线| 天天干 夜夜爽| 九九99精品视频在线观看| 图片区 小说区 区 亚洲五月| 五月婷久草| 久草视频一,二三四| 五月丁香WWW| 欧美Va婷色| 中文字幕日本最新乱码视频| 91干在线| 五月婷婷真爱激情网| 日日爽夜夜爽| 婷婷操超碰| 白天AV月月| 婷婷色综合| 成人做爰高潮A片免费视频| 色www.con| 五月丁香六月合| 91色色色| 91艹人| 五月婷AV| 国产精品久久久久久久久久免费| 色v综合网| 日本AAAAAAAAAAAAAA片| 98国产精品综合一区二区三区| 91婷婷色 | 99 热| 狠狠狠狠狠干| 久久激情四射| 亚洲天堂亚洲色色色| 五月丁香六月激情综合| 大香蕉丁香| 日本色婷婷久久99精品91| 91丨九色丨高潮丰满日本| H亚洲| 26uuu国产色| 成人五月天丁香| 精品亚洲国产成AV人片传媒| 狼人婷婷综合| AV色婷婷| 色播五月婷婷| 熟女激情网| 97人凄人人操人人爽| 婷婷五月色花丁香社区| 久久99性爱| A片天天| 天天在线久久综合 | 色情五月综合婷婷| 狼友视频在线观看18| 99视频精品在线| 丁香五月婷婷老师网站| www.亭亭五月天| 在线成人va| 99色激| 97干综合网| 亚洲第二AV| 色色 亚洲| 久久人妻熟女一区二区| 狠狠狠激情网| 99热在线播放精品| 中文AV在线观看| 97人人看| 99精品偷自拍| 日日操夜夜骑| 成人AV免费观看| 性爱综合网| 丁香六月天婷婷开心综合| 99热日本精品| 婷婷精品| 狠狠色婷婷六月激情网| 欧美伊人9| 色色色色色色色色综合网| 激情综合网之激情五月| 日韩不卡123| 99热8| 国产日产成人亚洲欧美国产VA| 久久九九99| 五月综合色播播丁香婷婷| 伊人玖玖网| 五月天色色网站| www.亚洲激情| -91九色大屁股| 中文字幕网伦射乱中文| 噜噜色五月| 久久激情综合| 超碰人人艹| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 大香伊人婷婷影院| 激情五月婷婷网| 五月丁香六月婷婷综合伊人| 久草视频一,二三四| 成人精品视频99在线观看免费| 91精品久久久久久综合五月天| 五月丁香六月激情综合| 无码碰碰| 五月丁香婷婷欧美| 亚洲色视频| 91精品熟女| 97婷婷在线| 性欧美大战久久久久久久83| 色五月天丁香| 婷婷成年人免费视频| 综合欧美五月婷婷| 国产激情在线| 91男人资源站| 精品一二三区久久AAA片| 涩涩五月天| 激情五月丁香激情综合网| 五月婷婷啪啪网| 婷久久久| 日本V在线观看不卡视频网站| 丁香六月激情四射| 综合激情五月天六月婷免费视频| 日韩狠狠色婷婷| 琪琪色五月天| 九九色天堂| 超碰在线日夜| 九九亚洲| 99爱精品| 777色色色| 成人综合AV| 强伦轩人妻一区二区电影| 五月综亚洲| AV色五月婷婷| 久热9| 色老久久| 久婷婷色| 亚洲精品网址| 操婷婷基地| 婷婷色网址| 在线18av | www.色婷婷.com| 婷婷免费视频| AV性爱网| h在线看免费版在线看| 大香蕉网站,大香蕉综合| 日本五月天网站| 99精品在这里| 久久这里有精品| 五月丁香啪啪伦理电影| 亚洲色爱综合| 亚洲综合五月| 人妻少妇色综合| 99热这里是精品| 婷婷激情六月| 色在线99| 久久久18| 丁香激情五月| 第一区久久网站| 五月天激情日色在线| 呦呦v线| 九九在线免费观看| 五月丁香色婷婷综合| 99re热视频| 丁香美女主播视频在线观看| 亚洲精品激情| 丁香婷婷色九月| 99日在线视频| 91丨九色丨国产打屁股| 青柠影视免费高清电视剧| 办公室少妇激情呻吟A片在线观看| 国自产拍偷拍精品啪啪一区二区 | 国产精品色色色色| 亚洲成人黄色网| 人人播| 思思热闹这里只有精品| 欧美激情五月天在线观看| 五月色情网| 婷婷五亚洲| 五月丁香六月激情综合| 综合色图区| 色噜噜狠狠色综无码久久合欧美| 黄网在线免费观| 毛片蕉地一二| 久久久婷婷婷| 日韩综合大黄| 色九亚洲| 禁欲电影完整版在线播放| 伊人久久丁香五月91| 五月婷婷黄| 久久五月婷| 久久婷婷五月综合色播| 色五月色五天免费视频| 久久综合99| 国产乱人偷精品人妻A片| 91色色色视频| 六月99天天婷婷激情综合| 麻豆123区| 久色| 国产伦亲子伦亲子视频观看| 99热 在线播放| 色10月婷婷视频| 久99热| 婷香五月| 蒲京久久无码视频| 久久五月丁香婷婷| 五月天激情www| 婷婷金品综合视频| 五月婷视频在线观看| 99啪啪| http://www.sd-xiangsu.com/| 超碰在线精品| 久久这里只有精品视频15| 五月天婷婷基地综合网| 国产热精品| 久9热在线视频| 日韩AAAAA| 激情婷婷丁香| 丁香五月婷婷亚洲综合精品| 婷激情五月| 99热这里全都是精品| 婷婷亚州综合| 伊人六月无码视频| www.99在线| 伊人大香久久| 五月婷综合性中心| 亚州操人在线视频| 六月激情婷婷综合| 久久久久人妻中文| 五月丁香激情综合| 成人电影一区| 98永久精品| 欧美久久九九| 思思久久96热在精品国产,| 亚洲色综合| 色色色色综合网| 亚洲视频久久| 亚洲va欧美va国产综合久久久| 开心五月婷婷| wwwss在线观看| 亚欧州精品视频| 久热re在线视频| 都市激情小说婷婷| 日韩免费视频| 99久久a线观| 99热在线观看精品| 超碰免费人妻| 欧美乱码国产一级A片| 久久久久视剧HD| 六月丁香深深爱| 丁香色五月 97干| 久久婷婷五月| 俺去也五月| 久久久8| 9色在线视频| 99啪99| 成人免费高清在线播放| 激情久久综合网| 丁香五月激情婷婷婷婷在线观看| 精品视频网| 日本久久爱| 国产操逼视频网站| 五月婷亚洲精品| 大香蕉啪啪啪啪啪啪| 色婷婷色婷婷五月| 99久久高清视频| 99精品在这里| 99亚洲精美视频在线观看| 色色com| 六月色激情| 婷婷丁香亚洲色综合91| 99色视频在线观看最新| 99碰碰| 丁香五月激情宗合| 婷婷五月天小说| 六月丁香婷婷尤物| 亚州第一黄网| 天天爽天天操| 婷婷99狠狠躁天天| 色婷婷久久| 色婷婷五月网| 狠狠色九月| 欧美操人| 夜精品无码A片一区二区蜜桃| 人人添人人| 影音 五月 婷婷 久久| 激情五月丁香六月综合AVXXXX| 婷婷伊人綜合| 五月伊人网| 熟女激情网| 97操在线| 日韩另类在线观看| 成人va在线观看视频| A片试看120分钟做受图片| 五月婷婷二月丁香| 香蕉操亚洲| 国产亚洲99久久精品| 婷婷五月天激情综合网| 啪啪操操| www.狠狠| 色综合伊人网| 婷婷五月成人有| 99青青草99| 色情久久久| 深爱激情九九五月天 | 色情五月天首页| 九九超日本| 婷婷五月天激情小说| 99精品久久久久久久婷婷久久| 激情五月婷黄版| 色播综合| 99热久| 欧美激情五月天婷婷| 99九九99九九九视频精品| 久热黄色| 五月天激情开心网| 国产成人网站在线观看| 好吊兆人妻| 91啪啪| 九九亚洲视频| 天天搞夜夜叫| 人妻操日日| 性av| 午夜色婷婷| 人人视频色| 综合亚洲六月婷婷在线| 日韩成人影片在线观看| 天天色播| 久久色9| 毛片新网地| www.激情.com.| 欧美三级级99久久| 亚洲亚洲人成综合网络| 日韩啪| 99成人小视频| 婷婷色五月综合丁香| 婷婷娌伦网| 狠狠爱成人综合网| 色五月婷婷在线| 五月婷婷六月丁香五月| 欧美亚洲婷婷五月| 五月天色婷婷激情综合| 99爽视频| 色婷婷性爱| 久久久婷丁香五月| 狠狠穞A片一區二區三區| 色色色地址| 六月色播| 操啊操av| hd五月婷婷在线| 欧美激情丁香五月| www999日韩精品| 人妻中文字幕精品| 刘玥精品一区| 三级毛片视频| 中文毛片无遮挡高潮免费| 欧美丁香婷婷五月| 影音先锋一区| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 久青操| 婷婷丁香人妻天天爽| 日韩操逼小电影| 久色五月婷婷综合| 五月天婷婷丁香花| 五月六月激情婷婷| oumeisesewang| 五月天天天操天天爽夜夜操| 99久久精| 天天性视频| 4399成人黄A片| 欧美人人操| 黄网网站在线播放| 色色免费网站| 五月婷久久| 五月丁香婷婷基地| 91精品久久久久| 91欧美| 色 免费网站视频| 亚洲婷婷视频| Av性爱网| 啪啪啪五月天| 精品无码视频| 久久视频这里99| 小视频久久久aaa| 欧美这里只有精品| 五月99久久| 五月婷婷六月丁香综合| 在线播放中文字幕| 天天日天天操心| 天天日夜夜帕| 五月的色婷婷高潮| www.yw色| 综合激情五月丁香| 超碰成人免费| 日本视频久久| 噜噜五月天综合| 狠狠色五月| 久久婷五月天| 日韩一66精品| 日本操逼九九九九58日本操逼| 欧美日韩AAAA| 色99在线观看| 日本三级大片| 久热A片| 超碰人人99| 任你艹| 天天操夜夜夜拍拍拍| 国产精品久久7777777精品无码| 激情五月天电影| 97操视频| 99热在线观看精品| 色玖玖导航| 丁香六月综合激情| 91狼友视频在线观看| 嫩草视频观看| 天天日综合网射| 操射国产日本| 五月婷婷丁香综合| 亚洲无AV在线中文字幕| www.久9| 天天爽在线视频| 五月天激情.com| 97色天堂| 国产精产国品一二三在观看| 日本一级大片| 国产日韩欧美性生活| 婷婷五月另类网站| 狠狠操狠狠插| 激情文学 综合 九月| 色区久久| 国产精品色婷婷AV综合色色| 欧美精品999| 婷婷五月天免费99| 91精品无码| 色丁香久久久| 日韩无码色色| 婷婷丁香五月天色色| 亚洲小视频免费看| 久久久性爱视频| 99热这里只有精| 亚洲午夜一区二区| 五月在在观看| 久热成人| 玖玖玖婷婷婷| 亚洲视频丁香网va| 九九re精品视频在线观看| 精品人妻久久久久| AVDV久久| www.五月天色色色| 五月丁香婷婷啪啪综合网| 亚洲啪啪啪啪| 丁香五月九九| 色色色色色色色色色999| 婷婷亚洲天堂| 五月婷婷日| 久久一二三视频| 99视频在线精品免费观看2| 39视频第二区| 日本熟女一区二区| 三级三久久线久久99久目本WW| 婷婷五月,偷窥偷拍网| 五月婷婷无码专区| 日本久久天堂| 超碰91在线| 激情婷婷丁香| 色婷婷无吗| 99视频精品全部免费观看| 五月丁香777| 超碰93在线观看| 久久视频这里有精品99| 亚洲春色奇米影视| 五月色亭丁香| 清色五月天| 久久婷婷热| 久久综合九九| 天天操B| 人妻激情视频| 五月婷亚洲精品| 丁香五月瑟瑟| 五月婷婷久久网| 精品国产AV色一区二区深夜久久| 大香蕉人妻| www.91.com黄| 啪啪操超碰| 丁香五月天婷婷中文字幕| 超碰五月婷婷五月天| 开心五月婷婷99| 91久久精品国产91性色TV| 电影《战争与艾拉》免费观看| 婷色五月| 婷婷色在线观看| 操一区| 午夜成人AV在线| 综合色五月天| 欧美99热| 色婷婷五月综合| 亚洲色9| 五月天激情综合| 精品国产va久久久久| 天天射影院| 二人电影免费版在线观看| 久草五月| 天堂五月婷婷| 九九婷婷五月天| 99热这里只有精品最新| 久久久亚洲成人无码A片| 色情综合网| 婷婷五月丁香A∨| 色五月激情综合| 天堂资源欧日浪女在线播放| 67194成I人在线观看线路1| 99热自拍| 99视频内射三四| WWW.桔色成人.COM| 亚洲色区17| 色老久久| 五月丁香网视频| 成人无码髙潮喷水A片| 成人婷婷五月| 1024在线视频| 亚洲成人av在线| 最新热中文字幕| 国产成人AV不卡| 五月婷婷在线播放| 亚洲天堂啪啪| 超碰国产在线| 激情五月综合网最新| 久久久久久久久久久97| 五月天成人小说| 第六色在线| 99久久高清视频| 五月丁香婷婷色| 亚洲综合色丁香婷婷六月| 大香蕉啪啪啪啪啪啪| 丁香激情久久| 99综合视频| 99福利导航| 色婷婷五月天在线观看| 97色五月天| 99啪啪骑| 激情五月丁香婷婷| 亚洲综合狠狠艹| 激情久久久久久久久久| 婷婷97| 天天天久久人人人合| 久久婷婷五月天懂色| 婷婷丁香五月综合网| 婷婷五月天影视首页| 操笔无码| se99热久久一本| 97在线视频观看| 99爱视频免费| 婷婷五月综合欧美在线播放| 亚洲视频无| 97五月综合网| www.minyis.com【JT】实力收量可预付QQ2101460746 | 亚洲成人乱码av网站| 欧美亚洲成人在线| 99久久久久| 噜噜五月天综合| 99热思思久| 日本99婷婷| 色墦五月丁香| 超碰在线综合| 思思热在线精品视频网站| 久久五月天色婷婷| 桃色五月婷婷| 久草热在线视频| 天天色天天日| 丁香婷五月| 激情综合亚洲| 五月天激情图片网| 亚洲色无码A片一区二区麻豆| 天天做天天爽| 欧美色欲色欲天天天www| 久热精品视频在线观| www激情网站| 性色九九| 五月丁香啪| 婷婷久久亚洲| 久青草影院| 这里只有精品在线看| 亚洲人人96@| 99人碰碰碰| 丁香五月电影院在线观看| 九月丁香婷婷基地| 九九热超碰| 99色热| 91视频五月丁香| 婷婷色5月激情网| 亚洲五月婷天天操| 国产精品久久99| 操B五月天| 91日视频| 欧美啪啪网| 97自拍视频网| 九九热9| 九九婷婷五月天| 99无码精品| 日韩婷婷| 九九热最新视频| 久久色情| 国产精品久久..4399| 五月丁香花视频| 天天天天干| 五月婷婷色播| 五月丁香五月婷婷| 亚洲男女激情| 天天干天天日天天操| 色婷婷www| 丁香六月婷婷色XXXXX| 人人妻久久妻| 热99在线| 五月婷婷亚洲色视频| 天天久| 五月天成人综合| 婷婷五月天网| 9精品在线| 色人久夂| 欧美三级欧美一级| 91超碰九色| 五月丁香大香蕉| 激情五月天黄色小说| 国产人妻操逼| 久久婷婷五月国产激情综合片| 亚洲综合字幕色色| 久久综合这里只有精品1| 蜜乳9188| 五月丁香花伦理电影| 这里只有九九精品| 99日韩网站| 五月婷婷丁香俺日污视频| 丁香婷婷色五月激情综合| 色五月涩涩婷婷| 久久六月天| 婷婷另类小说| 国产精品扒开腿做爽爽爽A片唱戏| 少妇人妻丰满做爰XXX| 美女久久婷婷| 亚洲色图啪啪| 激情亚洲婷婷| 久热九九| 熟女五月天久久综合| 五月丁香AV在线| 天天草天天爽| 人人爱国产| 亚洲亚洲人成综合网络| 亚洲中文字幕在线电影| 中文字幕第四色.999| 九九综合九九| 欧美色六月婷婷| 99热这里只有精品2| 丁香色综合| 99久热| 高清 码 免费看片短视频| 九九综舍久久| 亚洲综合视频天天精品| 五月婷婷开心六月激情小说| 久草热视频在线观看| 综合久久综合久久| 天天日天天舔| 国产操逼网站| 狠狠大香婷婷爱| 色婷婷五月天综合网| 亚洲人妻Av| 97精品人人A片免费看| 综合九色| 色热久资源| 91精品综合久久久久久五月丁香 | 亚洲精品电影| 99色在线观看| 亚洲AV日韩无码| 97干干干丁香| 丁香六月狠狠干| 亚洲一区先锋影音| 婷婷色五月开心五月| 熟女人妻一区二区三区免费看| 日本情色一区二区| 狠狠狠狠狠狠草| 五月婷婷欧美| 丁香五月婷婷乱| 秋霞A V毛片| 日韩AV中文在线观看| 99人人操人人爱久久久| 丁香婷婷六月激情| 天天综合色| ..真实国产乱子伦对白在线_欧 | 日韩综合久| 色婷婷综合五月| 婷婷97碰碰| 超碰婷婷五月| 日韩色色网| 五月丁香婷婷视频| 麻豆AV一区二区三区| 美女黄频aⅴ视频| 久久婷婷五月综合色和| 激情婷婷| 日本色99| 色色日本| 不卡在线视频| 婷婷丁香社区网| www,超碰| www.韩日视频| 亚洲婷婷月丁香五月| 综合色图区| 18久久| 开心五月综合| 色婷婷成人做爰A片免费看网站| 国产成人高清| xx人人xx| 日韩不卡123| 午夜九九电影| 五月婷婷综合网| 五月婷婷99热| 婷婷玖玖五月天| 99caobi| 99色免费视频| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 精品自拍99| 婷婷五月天激情小说网站| 99热在线观看免费精品| 欧美在线操| 天天综合五月天| 99色免费| 婷婷五月丁香综合激情| 黄色片avv| 思思久久思思| 中字幕视频在线永久在线观看免费| 永久思思热在线| 久久婷婷成人综合色怡春院| 婷婷五月色天| 91干| 91色色色| 超碰成人电影| 99re久久| www久| 久久机热/这里只有精品| 丁香五月日韩| 99精品国产热久久91色欲| 991国产精选视频在线播放下载| 久久精品人妻| 4399高清无码视频| 天天日日夜夜| 婷婷五月天Av| 99综合在线| 日韩啪啪网| 天天日日夜夜| 五月丁香直播| 久久婷婷七月丁香| 日日日日操|