99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜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| 婷婷五月深情丁香深爱日韩| 亚洲韩国日产综合AV| 五月天激情视频| 日日干五月天婷婷| 色欲久久久久久综合网综合网| 欧美操人| 天天日综合| 丁香五月天欧美| 97热久久| 色色婷婷色色| 六月婷婷青青青视频| 婷婷天天日婷婷| 夜夜夜夜夜骑撸| 亚洲天堂亚洲色色色| a在线免费v| 无码人妻少妇色欲AV一区二区| 夜夜夜夜撸夜夜操| 性日本精品| 天天草天天爽| 4399在线日本A片| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | 久热免费视频| 99操久久| 超碰在线看| 思思re99视频在线观看| 日日夜夜天天综合| 在线看黄色| 激情婷婷丁香| 免费观看全黄做爰的视频| 一级精品999WWW| 激情网婷婷婷| 几激情五月婷婷色五月色天堂| 99惹精品视频| 亚洲99精品欧美一区| 精品自拍97| 亚洲人妻av| 五月天激情亚洲| 超碰人人91| 天天爽日日爽夜夜爽| 天天看片日日夜夜| 五月天综合区| 亚洲色在线观看| 99热精国产这里只有精品| 丁香六月婷婷综合激情欧美| 99久久黄色顶级视频| 在线成人网址| 婷婷视频在线| 国产亚洲99久久精品熟| 毛片九九九九九九| 日本一级特黄大片AAAAA级| 99热欧美精品| 久久五月天精品视频| 五月婷俺去也| 婷婷丁香亚洲五月天| 人人爱天天摸摸天天爱| 欧美色五月天| 五月天婷婷免费| 黄色三级日本| 色噜噜狠狠色综无码久久合欧美| 亚洲av成人一区二区电影在线| 大香焦啪啪啪| 久热超碰91| 日本色99| 婷婷五月天com| xx综合网| 丁香五月社区| 丁香婷婷综合激情五月色| 这里有精品| 开心激情网五月| 欧美色图天堂网色| 一个色的综合| 婷婷99狠狠| 五月天狠狠色| 久久婷婷九月国产精品| 99久久视频| 琪琪色五月天| 六月丁香激情婷婷| 丁香六月在线| 丁香九色不卡aaa| 99人人看| 草操AV在线| 天天操天天操| 丁香五月婷婷啪| 日本va欧美va国产激情| 嫩草视频| 五月丁香六月婷婷在线小说视频| 色婷婷激情四射视频| 久操热| 99国产精品白浆在线观看免费| 91se精品国产| 性爱网久久| www.婷婷,com| 五月天精品| 一区中文字幕电影| 久热这里精品免费| www超碰| 免费视频WWW在线观看网站| 天堂网亚洲色图| 国产成人综合在线| 精品成人a v无码内射| 玖玖婷婷五月天| 亚洲久久天堂| 青青草蜜臀| 激情丁香五月| 亚洲热久| 狠狠色噜噜狠狠| 九九aV| 超碰亚洲欧美| 青娱乐美女福利视频美臀| A1片久久久| 97在线观看| 国産精品| 一级精品999WWW| 在线观看免费观看在线9久| 激情四射婷婷色色色| 婷婷五月天影视| www.色五月.com| 熟妇国产| 婷婷精品性性性性性性性| 99热这里只有精品16| JlZZJlZZ8JlZZ亚洲熟女| 9+1视频网址| 99操逼| 六月丁香婷| 丁香久月婷| 激情 婷婷 插| 色五月,com| 欧美99热| 久久婷婷五月综合色欧美| 91狠狠色丁香婷婷综合久久| 伊人久久婷婷| 天天日天天做天天舔| 精品人妻一区| 啪啪六月婷婷| 性视频久久| 色情开心五月| AV在线资源| 91综合在线观看| 五月综合六月婷婷| 一区=区操屄高清大全av| 亚洲五月婷婷在线| 四LLL少妇BBBB槡BBBB| 婷婷激情伍月网| 丁香激情五月| 亚洲永久免费| 99久久9| 日本91在线| 五月狠狠| 大香蕉人妻| 天天久久狠狠色综合| 黑人熟妇一区二区三区| 91综合在线| 日本三级黄色大片| 99热在线观看| 色区域网站视频| 国产av网| 久久婷婷五月综合激情国产| 桃色五月婷婷| 九月丁香久久网| 五月婷色啪| 激情五月婷婷视频| 精品人妻伦一二三区久久| 任你干嘛免费视频播放| 欧美婷婷五月丁香| 五月丁香色婷| 97久久久久| 狼友超碰| 四LLL少妇BBBB槡BBBB| 69午夜成人影片| 国产精产国品一二三在观看| 丁香五月婷婷激情蜜桃| 天天久综合网永久入口17v| 91丨九色丨丰满人妖| 久久视频婷婷视频| 欧美成人AAA片一区国产精品| 99热精品一区| 伊人超碰| 丁香激情综合| 天堂久久精品| 色五月婷婷DVD| 久热A片| 五月婷婷综合丁香视频| 丁香九月综合| 99久久婷婷综合| 欧美色性色好| 五月婷婷狠天天色综合| 九月丁香八月婷婷久久综合久97| 91综合在线| 九九精品视频在线6| 婷婷综合偷拍| 无码人妻丰满熟妇奶水区码| 激情四射婷婷| 99re这里只有精品视频了| 亚洲爱婷婷| 高清激情av在线观看| 嫩草AV久久伊人妇女超级A| 五月丁香激情深爱婷婷| 深爱婷婷基地| 免费看成人747474九号视频在线观看| 色五月亚洲| 九九热最新视频| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 九月激情综合婷婷| 狠狠色 综合色区| 99热在线看片| 五月激情五月婷婷五月天在线| 色婷婷国产精品综合在线观看| 99热成人| 久久xxxx| 人人九色| 婷婷情爱五月天6| 精品国产va久久久久| 五月丁香六月停停停| 五月花免费视频| 99热这里只有精品3| 热99国产精品| 伊人婷婷大香蕉| 色99最新网址| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 亚洲色色在线| 九月丁香| 久久婷婷影院| 91成人视频| 琪琪狠狠干| 91狠狠综合久久| 新激情五月天天在线网| 色欲一二三| 天天日夜夜草进麻麻的子宫| 五月六月丁香激情视频| 激情综合亚洲| AV九九| 九九 激情 网| 97亚洲婷婷| 丁香五月婷婷香| www.色婷婷.com| 黄色成人网站在线播放| 亚洲五月天色| 99综合视频一体| 成人网站av免费网站推荐| 丁香五月影| 99热精品免费| 色综合99| 国产毛片精品一区二区色欲黄A片| 99精品网| 婷婷五月花| 熟妇人妻中文字幕无码老熟妇| 一级黄色影片| 五月天开心网| 伊人久久婷婷五月综合97色| 97超碰,人人舔,人人操,人人摸 | 久久这里有| 夜夜夜叫天天天做| 精品色色色| 天天摸日日舔狠狠添婷婷婷 | 拍真实国产伦偷精品| 五月亭亭直播| 国产成人一区二区三区在线观看| 丁香五月婷婷色综合| 福利视频在线播放| 欧美婷婷综合| 亚洲成人高清在线| 五月天婷婷综合| 性爱视频久久| 久久丁香婷| 色欲色香,www,com| 色婷婷综合综合网| 五月丁香激情片| 九九免费精品在线视频| 精品99只有。| 五月丁香婷婷网在线在线| 99热这里只有精品在线| 狠狠操狠狠操AV| 777色色色| 91热爆在线| 粉嫩AV久久一区二区三区| www.婷婷六月天| 国产69久久久欧美黑人A片| 色色色色色色色色色影院| 五月网站| 狼友超碰| 思思色综合网站| 狠狠色精品综合| 欧美色色色色色色| 国产欧美精品AAAAAA片| 伊人五月综合网| 大香蕉五月天婷婷丁香91| 99热播放| 五月婷丁香亚洲| 熟女激情五月天 | 成人做爰A片免费看网站找不到了 噼里啪啦在线观看免费完整版视频 | 99这里只有精品视频| 国产午夜精品一区二区| 欧美交换配乱吟粗大25P| 大香伊人久色| 久久丁香五月综合六月激情红杏视频| 五月婷久久在线| 色婷婷先锋| 能看的av| 久久综合婷婷五月| 五月丁香网中文字幕| 日日夜夜天天综合| 超碰免费在线| 久久婷网| 五月天婷婷爱| 国产全是老熟女太爽了| 国产五月天婷婷| 热99久久这里只有精品| 色综合激情| 91av传媒高清在线视频网| 光棍影院日韩精品| 亚洲久热无码| 成人综合网站| a色色色色色| 五月婷婷 激情五月| 丁香婷婷基地| 色婷婷六月天| 丁香五月色| 狠狠操狠狠插| 91狠狠综合久久久| 九九性爱网| 色色三级视频| 色综合久久88色综合天天人守婷| 激情久久久久| 六月婷婷综合激情| 丁香六月婷婷综合缴| 成人超碰网| 九九热这里只有精品7| 婷婷五月丁香伊人| 婷婷五月综合中文字幕| 内射丰满人妻| 99精品成人无码A片观看金桔| 婷婷九九| 九九色影视| 大香蕉人人网| 久久爱婷婷| 国产成人精品一区二三区熟女在线| 五月激情网站| 玖玖99免费视频| 婷婷伊人綜合中文| 激情小说视频图片网| 538在线精品| eeuss人妻| 97色啪| 色色色天堂网| 久久五月天综合| 91a片爽| 亚洲爱爱无码婷婷色五月| 色色99| 99九九在线| 色欲婷婷五月天丁香| 亚洲成人综合网在线免费观看| 丁香花五月天| 激情综合网激情五月俺也去| 17.c黄色| 久久九九九九| 久99视频在线观看| 狠狠色丁香| 婷婷五月天久久久| 色色精品色| 久久国产色| 亚洲超碰在线| 久久99久久99久久99人受| 久久99热这里只有精品首| 成人午夜无码视频| 久久er九九| 香蕉久久国产AV一区二区| 综合99在线| 成人做爰A片免费看网站找不到了| 综合欧美五月婷婷| 一本色道久久88加勒比| 欧美成人色婷婷| 99人妻碰碰碰久久久久| www.超碰在线| 深爱激情小说五月婷婷| 操逼综合网| www.久久爱.com| 久久久中文| 婷婷五月婷婷| 丁香五月婷婷俺也要去| 日本人人干| 亚韩在线视频| 狠狠色综合777| 久久综合久色欧美综合狠狠 | 五月色综合网欧美网| 丁香五月影院| 久热这里只有精品6| 日本三级毛片| 大地资源色婷婷视频在线| 激情婷婷丁香色五月| 丁香六月成人网| 九九99精品视频| 美女天天艹人人爽| 日韩精品在线观看9| 五月丁香色婷婷久久| 97人妻碰碰中文无码久热丝袜| 久久五月婷| 五月天社区狠狠| 色九月婷婷丁香| 五月丁香五月婷婷| 色综合色综合色综合色综合| 99热免费网站| 激情骚五月| 99免费热视频在线| 天天爱天天做天天操| 久久综合丁香五月| 蜜乳人妻一区二区三区| 免费无码毛片一区二区A片| 久久精品视频在这里有| 热的国产,热的综合,热的有码| 超级碰碰碰久久网站| 亚洲综合99| 天天久久综合| 91碰碰| 9l久久久视频| 国外亚洲成AV人片在线观看| 日韩成人中文字幕| 四月婷婷丁香五月| 丁香网五月网| 久久丁香五月综合六月激情红杏视频| www.久久婷婷| 影音先锋五月天婷婷丁香在线观看| 久久草大香蕉| 91凹凸在线| 久久这里只有精品1| 日本久久网| 2013AV天堂| 久久AAAA片一区二区| 五月丁香大相交| 这里只有精品在线看| 天天性视频| www91在线| 91丨九色丨丰满人妖| 色综合久久五月| 欧美视频五区| 九月婷婷久久久| 啪啪五月婷婷| 丁香8月手机综合| 91 九色 熟女| 久久婷丁香五月| 情涩婷婷五月天| 99精品这里只有免费视频| 99热色婷婷| 丁香亚洲色综合| 免费无码毛片一区二区A片| 婷婷综合五月| 色五月婷婷基地| 久色婷婷200| 丁香社区婷婷五月| 天天擼久久擼在线| 五月激情婷婷开心| 色色色.COM| 99在线视频在线观看| 婷婷四月 成人 狠狠干| 99免费成人网| 可以免费看av网站| 六月婷婷色五月| 99这里只有免费的精品| 免费99情趣网视频| 六月丁香五月亭亭| 久久深爱激情网| 五月丁香久久综合精品| 婷婷五月天深爱| 99亚洲综合| 亭亭玉立国色天香| 男人天堂亚洲综合| 九九视频精品视频精品| 丁香五月天激情网| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 欧美天堂久久| 丁香婷婷性爱| 【乱子伦】黄色| 亚洲性爱干干| 婷婷丁香激情| 人人摸人人| 色五月色图| 91Chinese在线| www.99热这里只有精品| 高清无码网址| 97超碰色| 黄色五月婷婷| 青草视频在线蜜臀| 天天久| www.maotanji.com| a网站免费观看| 成人AV在线中文版| 亚洲视频无| 综合激情在线| 五月人妻婷婷| 色五月婷婷在线| 91九色丨国产丨爆乳| 丁香六月五月天| 国产人妻777人伦精品HD| 玖玖色综合色| 99ri国产在线| 久久96热| 九九色精品| 成人片黄网站色大片免费毛片| 热日韩欧美| 九九av在线| 人人亚洲| 色99色| www.五月天婷婷| 婷婷色色亚洲| 婷婷天堂综合| 亚洲色激情| 五月丁香婷婷色色| 亚洲AV无码成人电影| 婷婷五月综合久久中文字幕| 99亚洲欧洲| 狠狠狠狠狠干| 9精品久久999| 99九九在线| 五月天成人在线| 超碰在线视屏| 丁香婷婷久久综合在线| 开心四月婷婷在线色播播| 可以直接看的av| 99热精品在线播放| XX久久| 中文字幕性爱丰满| 色婷婷丁香| 亚洲AV无码一区二| 五月婷婷六月婷| 26uuu精品一区二区| 99国产99| 色五月激情综合| 五月色婷婷中文字幕| 丁香五月影| 色色色色欧洲| 91狠狠色色丁香婷婷综合久久| 国产黄大片在线观看画质优化| AV无码免费| 日日操人人操| 亚洲乱码日产精品BD| 91婷婷色| 丁香婷婷性久久| 九色综合网| 久久婷婷六月天| 色欲五月婷婷| 影音先锋 一区| 五月婷婷视频ab| 九九热视频在线观看| 亚洲啪啪网| 这里只有精彩亚洲视频推荐| 大地资源色婷婷视频在线| 天天摸天天肏| av久热| 91九色欧美| 婷婷色五月天在线| 欧亚中文A V| 久久性爰视频这里只有精品| 天天干人人奸97| 丁香五月激情欧欧美| 色婷婷综合网站| 久久久婷丁香五月天激情综合| 婷婷情色激情| 禁片二区| 人人操五月天| 97资源碰碰在线| 五月久久婷婷成人网| 中文字幕不卡网站| 丁香六月婷婷综合欧美| 久久九九囯产| 在线只有精品| 色天堂A| 婷婷人人操| 91精品婷婷国产综合| 99热综合色图| 色情综合| 激情综合亚洲| 五月天婷婷影院影院| 国产做爰视频免费播放| 热99热9| 狠狠狠狠狠狠草| 五月婷婷六月开心| www激情网站| 97丁香五月| 色六月婷婷| 青青草成人网| 五月婷婷综合色啪首页| 色色综合五月| 五月丁香久久网| 99久热在线精品| 97色色视频| 激情五月六月丁香| 91大神在线免费看视频全集男男一起操| 情趣视频66| 夜夜爱影院| 超碰成人免费| 九九亚洲小视频| 1024AV视频| 成人va在线播放| 殴美日比视频| AⅤ网站在线看| 五月天伊人网| 丁香五月性| 亚洲乱码日产精品BD| 亚洲激情免费视频| 色婷婷亚洲| 日本欧美成人片AAAA| 日日艹思思热| 337p大胆噜噜噜噜噜91Av| 五月婷婷综合网| 五月激情天天干| 色婷婷综合久久久久| 国产精品VIDEOSSEX久久发布| 丁香五月婷婷色播艳门照| 婷婷六月综合| 97超碰婷婷五月天| 黄色五月婷婷| 婷婷丁香色五月久久88| 婷婷丁香五月麻豆| 91色五月在线观看| 午夜大香蕉| 色性五月天| 色婷婷欧美| 婷婷中文字幕欧美| 99热在线精品观看| 色五月激情| 日日干日日色| 99超级碰碰| 国产亚洲精品久久久久久久久动漫| 26uuu成人网| 久久婷五月综合色| 网色99| 伊人大香蕉毛片| 色婷婷五月综合| 五月亭亭性| 狠狠色丁香99| 五月婷久久| WWW、日本色丁香、co m| 天天爱天天爽| 欧美视频五区| 色婷婷五月天视频在线| 五月丁香六月婷婷不卡免费无码| 婷婷九月丁香| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 日本啪啪天堂| 国产AV不卡福利| 丁香五月天堂婷婷| 亚洲亚洲人成综合网络| 五月婷综合| 婷婷激情视频| www.99热视频| 天天操电影院色狼性av| 色五月开心开心五月激情五月| 狠狠干狠狠色| 99热主页日本| 991精品在线视频| 9久热在线视频| 日韩av手机在线观看| 五月色丁香| 天天色图| 大香蕉五月丁香| 国产精品爽爽久久久久久| 欧美激情-区二区三区| 啪啪啪啪五月天| 欧美又粗又大一区二区在线观看| 9久久精品| 五月丁香成人| 无码区婷婷五月花开| 日本3级片一区2区| 天天综合网~91| 91亚洲视频| 五月天色色色网| 在线看AV| 在线日本www| 色在线免费观看| 热99玖玖99玖玖99九九| 日韩在线视频9色| 丁香五月影| 久久久高清| 97碰精品| 九九超日本| 亚洲 欧洲 国产 伦综合| 999九九九久久久99HD| 日韩AV一区二区三区| 亚洲欧美国产A片免费观看| 色综啪啪啪啪啪啪| 五月久久婷婷天堂视频| 婷婷四色五月| 五月天开心激情网色欲无码| 九九免费精品在线视频| 人妻肉射免费观看| 五月色丁香视频精品| 九九精品视频在线观看| 色婷婷五月天在线观看| 91狠狠色色丁香婷婷综合久久| 4399亚洲视频| 久久九九99| 久久婷婷丁香花综合网| 亚洲五月天色色| 九九热10| 激情伊人五月婷婷久久| 开心婷婷五月天激情网| 996er热| 久色| 在线色婷婷| 99热丁香五月| 这里有精品99| 无月播播激情在线观看视频| 久青草影院| 丁香五月在线| 五月丁香淫淫婷婷婷| 天天色天天日| 久久丁香五月天| 国产九月婷婷| www九九热| 亚洲日韩26uuu| 五月天婷婷久久视频| 五月天激情四射| 风流少妇A片一区二区蜜桃 | 婷婷激情五月天亚洲综合| 99在线精品视频在线观看| 人人操AV| 伊人在线另类| 九九热这里只有精品7| 成人欧美Va| 天天综合五月| 91精品久久久久久久久久| 五月亭亭色| 欧美成人无码一区二区三区| 夜夜干夜夜操| 99热在线观看| 婷婷九月亚洲| 99成人免费视频| 91精品综合久久久久久五月丁香| 五月激情综合婷婷| 国产乱码久久| 99热这里都是精品| 久爱综合| 婷婷五月在线综合| 99精品无码| 疯狂做受XXXX高潮A片| 综合另类视频| 99精吕视频在线观看了| 五月丁香啪啪啪| 久久久ww| 婷婷婷婷色| 疯狂做受XXXX高潮A片动画| 五月天久久综合| 开心婷婷五月中文字幕组| 婷婷五月天网| 日韩成人中文字幕| 成人丁香| 色婷婷aV四虎| 思思热性操| h在线看免费版在线看| 操97免费超级视频| 五月丁香六月成人| 91在线视频观看午夜福利| 激情桃色网 | 伊人久久五月天| 婷婷丁香六月| 欧美色图45678| 丁香 久久| 色色五月综合| www色综合| 极品精品一区二区三区在线| 国产婷婷五月中文字幕高清| 天天爽天天操| se99高清无码| 久久久免费精彩视频| 五月婷婷激情性爱| 九热视频在线精品15| 色婷婷亚洲在线观看| 国产一二三四五六七八视频| 99色爱| 色天天综合色| 久九男女天堂| 日日肏天天操| 婷久久高清| 六月五月婷婷| 超碰国产一区| 久久久久久久合一狠狠做深爱| 黄色中文字目| WWW.99热| 色色97丁香婷婷五月天| 色五月丁香伊人五月| 色五月美女| 俺也去在线视频| 亚洲黄色av网站| 99热一区| 9久久婷婷国产综合精品性色| 久碰婷婷视频| 9久久精品| 五月婷婷基地| 亚洲综合色丁香五月天| 日本久久色| 丁香六月激情国产| 丁香婷婷色情| 99久热| 天天做天天爱天天摸| 国产精品色| 婷婷六月天精品| 综合另类激情| 久色激情| 天天人人综合| 久色精品| 狠狠干在线| 狠狠爱婷婷爱| 伊人五月婷婷| 五月婷婷涩涩爱| 天天干夜夜想| 99日本精品视频热| 五月天激情小说网| 欧美成人五月天| 久久伦乱| 91丨九色丨大屁股| 中国激情网| 大香蕉婷婷丁香| 婷婷五月影院| 久久免费婷婷视频| 久久婷婷综合网| 精品一二三区久久AAA片| 狠色色狠网| 五月婷婷三级| 人与禽A片啪啪| 高清无码入口| 婷婷五月激情四月综合| 级人人91| 久/久精品99看9| 色五月激情基地| 99碰网站| 色婷婷六月| 久久大香蕉同僚| 婷婷六月色丁香视频在线观看| 欧在线一区| 婷婷久久综合久| 激情五月丁香六月婷婷| 9久久精品| 五月丁香婷婷狠狠操| 超碰99在线观看| 亚洲va欧美va国产综合久久久| 9久久婷婷国产综合精品性色| 色五月激情五月| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 玖玖精品资源| 丁香六月婷婷综合激情欧美| 五月停视频天堂| 亚洲成人网站在线观看| 五月婷婷丁香综合网| 五月天亚洲图片婷婷| 成人无码中文| 国产精产国品一二三在观看| 久久WW| 99综合免费视频| 丁香五月天天| 91大神操美女| 日本人妻久久| 黑人巨粗进入警花疼哭A片| 色婷婷88| 欧美成人网99网| 天天粽合合合合| 日本三级黄色大片| 婷五月天六| 丁香婷婷天堂| 拍真实国产伦偷精品| 久热黄色| 精品人妻久久久久久| 狠狠操在线视频| 秋霞黄色一级久久| 99热主页日本| 九九人人看| 日本nghangse中文字幕| 欧美黄色一级录像| 99热在线播放| 人人干人人看| 色综合婷婷| 天天干一干| 嫩草乱码一区三区四区| 国精产品一区二区三区| 天天做天天爰天天爽天天无遮挡| 丁香婷婷啪啪| 天天操中文字幕| 情一色一乱一伦一91A| 色婷婷aV四虎| 日韩精品呦呦va| 五月婷婷久久大片| 国产在线网| 99ER热精品视频| 少妇大叫太大太粗太爽了A片| 亚洲精品99| 久久99网| 五月婷在线| 狠狠干天天日| www激情| 丁香婷婷大香蕉| 色婷五月| 99在线精品免费视频| 99国产精品久久久久久久久久久| 国产 码在线成人网站| 五月婷婷啪啪| 99精品视频在线观看| 99国产精品久久久久久久久久久| www.久久99| 中字幕视频在线永久在线观看免费 | 一区操| 日韩美一级毛卡片| 色99婷婷五月天| 丁香五月综合久久综合| 91免费看片| 91热在线| 午夜色色色极品视频| 99热99日…..| 久久婷婷操| 五月丁香欧美综合| 久热免费视频| 色啪综合| 婷婷五月天小说| 日本V在线观看不卡视频网站| 天堂久久久久天堂网| 在线sebiav精品视频| 五月天激情啪啪| 色五月天激情| 大波美女VA网站| 日日撸日日操| 九九在线视频| 欧美激情VA永久在线播放| 最近韩国日本免费高清观看| 国产毛片操B| 九九热婷婷| 夜夜夜天天操| 六月婷婷国产| 99男人的天堂| 天天日天天色| 国产黄色大片| 久久精典| 五月丁香人人婷婷在线观看| 这里只有精品免费视频| 五月丁香久久网| 日本欧美成人片AAAA| 强奸幻女毛片| 97色碰| 五月天色婷婷基地| 丁香六月激情综合| 91啪级电影| 色五月大| AA片在线观看视频在线播放| 欧美色碰| 99这里只有精品8| 五月丁香综合激情网| 色屌丝中文字幕| 婷婷综合玖玖五月| 久久五月婷婷电影| 亚洲第一精品成人999久久精品| 五月丁香色| 日本色色色色色色色色一色二色| 丁香五月婷婷偷拍| 呦呦v线| 婷婷涩五月| 91黄色五月天视频| 激情综合5| 97色色色色色| 公的粗大挺进了我的密道| 99热九九在线| 热99色| 亚洲AV网站| 丁香婷婷婷五月| 9久久精品| 天天干天天曰天天射| 丁香五月老师| 在线99热| 在线99精品| 国产性色蜜乳| 亚洲色视频| 九九综合网色全集 | 色99婷婷五月天| sewuyue第四色| 久久综合婷婷| 狠狠se| 99热只有精| 国产精品第一国产精品| 久99久在线| www.henhengan| 丰满少妇猛烈A片免费看观看| 五月久久婷婷| 99热这里都是精品| 亚州第一黄网| 五月丁香色播| 九九热在线精品视频| 96丁香六月婷婷蜜桃综合久久| 日韩五月丁香| 99热 日韩| 五月丁香WWW| 久色资源| 亚洲激情综合网| 五月开心网| 亚洲性爱AV| 久久丁香五月婷婷| 无码人妻丰满熟妇奶水区码| 热的国产99热| 色色色色色色色色综合网| 99视频网址| 青青草五月天| 欧美激情 日韩无码 婷婷 五月天| 激情五月婷婷伊人| 精品夜夜澡人妻无码AV| 色婷婷五月天激情| 激情综合网五月激情| 97香蕉久久超级碰碰高清版 | 91超碰在线观看| 9l视频自拍九色9l视频在线观看| 91jiuseshunv| 色五月丁香婷婷| 国产婷婷久久| 啪啪啪五月天| 五月丁香六月激情综合欧美| 成人免费黄色短视频| 五月婷高清视频| 天天日日夜夜| 亚洲综合网激情小说| 天天综合色| 五月丁香六月婷婷综合免| 香蕉久久国产AV一区二区| 久久久久久天天日天天爱| 色色99| 夜夜噜夜夜奇| 五月美女婷婷风骚| 婷婷五月天香蕉| 操婷婷基地| 日本久久精品18| 婷婷性爱网| 综合色色色| 这里只有精品,日韩视频| 黄桃AV无码免费一区二区三区| 五月色情婷婷开心五月色情| 亚洲视频一区| 五月成人综合| 婷婷久久五月天中文字幕在线观看| 色天五月天在线观看视频| 六月婷婷综合激情| 天干夜夜操| 综合五月亭亭9| 五月天小说激情| 激情综合五月婷婷| 丁香花五月天激情| 久操操| 久久精品66| 亚洲在线成人| 99综合视频一体| 五月激情另类| 97超碰9久热婷婷热| 五月婷婷色| 亚洲激情亚洲激情 | 综合五月丁香97| 操碰99| 热久久成人| 国产av第一专区| 国产成人高清| 天天色天天爱天天舔| 欧美五月婷婷综合| 五月丁香色婷婷久久| 五月丁香激情片| 久久九九热38| 久99久在线| 99热综合在线观看| 九色激情网| 亚洲操操操| 久久精品视频在这里有| 大香蕉综合网| 丁香婷婷婷| 99热久| 丁香五月精品| 色五月首页| 亚洲人成播放网站| 九九色综合| 五月天婷婷中文字幕在线播放| 9191avse| 香港九九六区八区99| 97干在线| 啪到高潮激情丁香五月| 久久婷五月| 去色色五月天| 亚洲成人免费在线| 色色a| 婷婷丁香第一页| 99资源在线视频| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品| 青青草成人网| 色五月婷婷开心| 五月婷婷啪| 99精品网址| 色宗合,宗合网| 五月婷六月| 日韩人妻在线播放| 操一区| 欧洲一区二区| 99热这里只有精品最新网址| 婷婷激情丁香五月婷婷激情丁香五月婷婷 | 久久全色| 超pen个人视频97| 六月婷婷色综合| 久久丁香五月天| 天天干天天干天天干天天干天天干天天| 六月婷久久| 婷婷狠狠狠爱| 天天草女人| 婷婷丁香六月天| 欧美影院婷婷| 激情五月激情综合网| 五月婷婷伊人久久| 婷婷五月色花丁香社区| 99色色| 婷婷自拍| 99re久热| 久9热视频在线| 日本精品久久久久中文字幕| 欧美色色色| 日本在线视频播放91| 天天舔天天操| 丁香五月六月激情久久| 四虎婷婷五月天| 六月丁香成人| 五月婷色| 国产激情综合五月久久| 久99久精品| 超碰国产AV| 操婷婷久久| 91在线看片| 九九综合九色欧美狠狠| 91成人看| 五月丁香性| 人人人va亚洲视频在线| 六月香五月婷| 婷婷五月天.com| 六月丁香成人| 欧美狠狠草| 人人草公开操| 丁香六月AV| av 一区三区四区| 亚洲综合在线伊人婷| 99精品热| 色五月丁香六月资源站| 久久婷婷五月综合97色一本| 狠狠丁香| 婷婷五月激情四月综合| 激情综合自拍五月婷婷色五月| 全亚洲最大的婷婷五月天网站COM| 五月丁香婷婷综合| 入口五月婷婷六月香| Xx色综合| 深爱激情小说五月婷婷| 激情综合网,五月| 99热精品9| 色吧五月婷婷| 久久久无码精品成人A片小说| 日日干夜夜干| 二色AV| 天天插天天日| 大陆极品少妇内射AAAAAA| caop视频| 激情五月天婷婷丁香| 97超级操操| 4399在线日本A片| 婷婷五月天最新综合你懂的 | 婷婷五月丁香久久| 99国产小视频2013| 日韩欧美四五区| 四月婷婷丁香| 色五月激情综合| 色色色色色综合| 欧美性生交XXXXX无码小说 | 久久九九国产精品怡红院| AV在线大香蕉| 99激情| 99操不停| 天天射美女| 色999五月色| 色色综合色| 婷婷伊人网| 农村熟妇高潮精品A片| 99视频在线看| 99热网站| 女力报到正好爱上你| 色婷婷偷拍| 六月色色| 丁香五月 激情文学| 午夜色婷婷| 99热骚货| 亚洲黄色精品| 中文字幕乱码亚洲精品一区| 五月婷婷国产| 婷婷第六色| 九九九九这里只有精品| www.zbzhongsen.com| 色综合色香蕉网| 99热主页日本| 综合色综合| 色色婷婷五月天| 狠狠久久婷五月综合色| 99精品热视频| 五月天婷婷成人资源站| 五月丁香福利| 色色色com| 亚洲av免费在线| 色五月婷婷婷婷| 丁香婷婷大香蕉| 亚洲成人av中文| 精品思思久久| 淑女丝袜bi操逼123| 亚洲色五月| 狠狠五月激情丁香六月| 五月婷婷色情| 激情图片五月天| 日韩xx在线| 日韩欧美四五区| 亚洲操逼网| 日韩精品电影| 三十路磁力链接| 99操| 激情久久丁香| 天天干、天天日日| 久热超碰| av在线免费网站| 淫荡工a| 丁香五月天视频| 色色色婷婷五月天| 99免费热视频在线| 色五月激情五月| 六月丁香婷婷五月天| 99视频在线观看网址| 五月丁香色停停啪啪啪| wuyuedingxiang99| 天天搡日日搡aaaaⅩ| 婷婷激情四射五月天| 亚洲成人乱码av网站| 五月丁香啪啪网| 影音先锋一区二区三区| 人人干人人操人人摸| 婷婷99视频全集高清| 丁香婷婷人妻综合网| 日日爽日日| 生活片五区| 五月丁香婷婷综合| 操碰99在线视频观看| 天天干天天色天天干| 国产精品人成A片一区二区| 噜噜噜噜噜在线| 六月丁香啪啪啪| 五月 激情视频| 十一月婷婷激情四射| 一区二区你懂的| 丁香五月精品| 久久婷婷五月综合色丁香花| 黄色99网| 国产69久久久欧美黑人A片| 婷婷久久婷婷色五月| www夜夜| 99小视频在线| 夜夜骑夜夜撸| 五月丁香六月综合情在线观看| 免费黄色片子| 久久9视频| 99天堂网| 色九区| 99在线免费观看| 六月丁香五月婷婷首页| 91丨九色丨国产打屁股| 久月丁香爱婷婷综合| 成人做爰A片免费看视频| 欧美激情五月天在线观看| 久久精品一区二区三区四区|