亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

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

C# NPOI 操作 Excel:選型、流式導(dǎo)出與避坑 簡(jiǎn)介面向正在用 C# 處理 Excel 的 .NET 開發(fā)者這份資料圍繞 NPOI 庫給出可直接參考的讀寫示例覆蓋舊版 .xls 與新版 .xlsx 兩種格式既適合剛接觸 NPOI 的新手入門也適合需要封裝通用工具類的中級(jí)開發(fā)者對(duì)照借鑒。壓縮包共 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 到底解決什么問題后臺(tái)要導(dǎo)一份對(duì)賬單服務(wù)器上沒裝 OfficeMicrosoft.Office.Interop.Excel一跑就拋 0x800A03EC這個(gè)場(chǎng)景我見過不止一次。換個(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)入、模板填充的后臺(tái)服務(wù)、桌面工具和接口項(xiàng)目如果你只是偶爾手動(dòng)改個(gè)表那確實(shí)沒必要上它。2. 技術(shù)選型與工程結(jié)構(gòu)HSSF、XSSF、SXSSF 三套模型怎么分工打開 NPOI 的命名空間會(huì)看到一堆HSSF開頭的類第一反應(yīng)通常是“這不是 Java 那套的翻版嗎”。確實(shí)接口模型沿用了IWorkbook/ISheet/IRow/ICell這層抽象好處是同一份業(yè)務(wù)代碼換個(gè)實(shí)現(xiàn)類就能讀寫不同格式壞處是新手很容易在new的那一行就把類型寫死后面想兼容.xls就得大改。選型這一步基本決定了后面會(huì)不會(huì)返工所以拆代碼之前先把模型說清楚。2.1 三種工作簿模型的邊界模型對(duì)應(yīng)格式內(nèi)存形態(tài)適用量級(jí)主要限制HSSFWorkbook.xls全量駐留內(nèi)存幾萬行以內(nèi)單表 65536 行、256 列XSSFWorkbook.xlsxDOM 全量駐留十萬行內(nèi)看堆大小行數(shù)越多內(nèi)存線性上漲SXSSFWorkbook.xlsx滑動(dòng)窗口 磁盤臨時(shí)文件百萬行級(jí)已刷出的行不能再改、不能刪行我的默認(rèn)規(guī)則很粗暴對(duì)方?jīng)]明確要求.xls一律XSSFWorkbook導(dǎo)出預(yù)估超過五萬行直接上SXSSFWorkbook只有對(duì)接老系統(tǒng)、對(duì)方還在用舊版表格軟件時(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ā)過來的“對(duì)賬單.xls”里裝著的其實(shí)是 HTML 表格這種事我一年能遇到兩回。2.2 示例工程的分層與目錄結(jié)構(gòu)示例工程我按“核心邏輯不依賴 UI、不依賴文件系統(tǒng)”來切目錄長(zhǎ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)存流做往返測(cè)試 │ └── RoundTripTests.cs ├── samples/ │ ├── legacy.xls # 老格式樣本 │ └── modern.xlsx # 新格式樣本 └── templates/ └── 對(duì)賬單模板.xlsxCore里我堅(jiān)持不讓IWorkbook泄漏出去。對(duì)外方法簽名一律是Stream進(jìn)、Stream或ListT出業(yè)務(wù)層根本不需要using NPOI.SS.UserModel;。這么做有兩個(gè)直接好處單測(cè)里傳一個(gè)MemoryStream就能跑完整鏈路不落盤Web 上傳場(chǎng)景拿到IFormFile.OpenReadStream()可以直接喂進(jìn)去不用先存臨時(shí)文件再刪。samples目錄的作用容易被低估。.xls和.xlsx在單元格類型、日期序列號(hào)、公式緩存上的行為并不完全一致光靠猜沒用必須有一份真實(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不寫版本號(hào)默認(rèn)拉最新穩(wěn)定版如果目標(biāo)框架是netstandard2.0要給老項(xiàng)目引用加-f netstandard2.0或者直接改 csproj 里的TargetFramework。Framework 4.x 的老項(xiàng)目不走 CLI在包管理器里裝完記得看一眼依賴項(xiàng)——NPOI 會(huì)順帶拉一個(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 的層級(jí)就四層工作簿 → 工作表 → 行 → 單元格。下面這段是最小閉環(huán)using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; public static void WriteSimple(string path) { // 1. 工作簿XSSF 對(duì)應(yīng) .xlsx IWorkbook workbook new XSSFWorkbook(); ISheet sheet workbook.CreateSheet(對(duì)賬單); // 2. 表頭行 IRow header sheet.CreateRow(0); string[] titles { 訂單號(hào), 客戶, 金額, 下單時(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è)字符或含[]:*?/\會(huì)直接拋異常。CreateCell(i)的索引從 0 開始跳著創(chuàng)建也允許比如只創(chuàng)建第 0 和第 5 個(gè)中間的空單元格讀回來是CellType.Blank。金額這一行是關(guān)鍵SetCellValue(1280.50)存的是數(shù)值Excel 里能參與求和如果圖省事寫成SetCellValue(1280.50)存的是文本Excel 會(huì)在左上角給你標(biāo)個(gè)綠色小三角用戶一點(diǎn)“轉(zhuǎn)換為數(shù)字”全部格式又亂掉血淚經(jīng)驗(yàn)。日期同理SetCellValue(DateTime)會(huì)把它轉(zhuǎn)成序列號(hào)存儲(chǔ)顯示格式由單元格樣式的DataFormat決定不設(shè)樣式就是默認(rèn)的日期顯示。最后workbook.Write(fs)這個(gè)重載在不同版本上行為有差異有的會(huì)把流關(guān)掉有的不會(huì)。不確定的話就在Write之后立刻fs.Flush()并且不要指望后面還能繼續(xù)往這個(gè)流里寫東西。3.3 用 WorkbookFactory 統(tǒng)一讀 .xls 和 .xlsx讀這邊最容易犯的錯(cuò)是寫死new XSSFWorkbook(fs)遇到.xls就拋Invalid header signature。正確姿勢(shì)是工廠加接口using NPOI.SS.UserModel; public static void ReadAny(string path) { using var fs new FileStream(path, FileMode.Open, FileAccess.Read); // 關(guān)鍵工廠根據(jù)文件頭自動(dòng)選 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不判會(huì) 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)部會(huì)讀文件頭判斷格式比看后綴靠譜得多。FirstRowNum和LastRowNum都返回索引空表或者全空行的情況下LastRowNum可能是-1、0或者你以為的行數(shù)寫for循環(huán)時(shí)用并且判row null這兩道保險(xiǎn)缺一不可。GetSheetAt是按順序取GetSheet(名字)是按名取。名字取不到會(huì)返回null而不是拋異常后面直接.GetRow()就炸了所以按名取的時(shí)候記得判空。3.4 跑起來看一眼dotnet run --project src/NpoiExcelDemo.Console -- ./out/demo.xlsx ./samples/legacy.xls參數(shù)依次是輸出路徑和要讀的舊格式樣本。跑完先確認(rèn)三件事out/demo.xlsx能被正常打開、金額那一列右對(duì)齊且能求和、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: // 日期底層是序列號(hào)必須靠單元格樣式判斷直接 ToString 會(huì)得到 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è)超了直接拋異常而且文件體積會(huì)以肉眼可見的速度膨脹——見過一個(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è)對(duì)象。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ù)超出的會(huì)被刷到磁盤臨時(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í)文件會(huì)留在系統(tǒng)臨時(shí)目錄 } }windowSize這個(gè)參數(shù)是內(nèi)存和磁盤 IO 的平衡點(diǎn)。設(shè)太小比如 100刷盤頻繁寫十萬行能明顯感覺到慢設(shè)太大比如 5000內(nèi)存優(yōu)勢(shì)就沒那么明顯了。我一般按 500 起步實(shí)測(cè)導(dǎo)出耗時(shí)偏高再往上調(diào)。Dispose()這一步不能省。SXSSF 在系統(tǒng)臨時(shí)目錄里建的文件只有Dispose才會(huì)清理進(jìn)程長(zhǎng)時(shí)間跑批又不釋放臨時(shí)目錄遲早被塞滿然后你會(huì)收獲一堆“磁盤空間不足”的告警排查半天發(fā)現(xiàn)是自己導(dǎo)出的表。4.4 兩種格式的行為差異能力.xlsHSSF.xlsxXSSF / SXSSF單表最大行655361048576單表最大列25616384單元格樣式上限約 4000約 64000文件本質(zhì)二進(jìn)制復(fù)合文檔zip 包 若干 xml新函數(shù)支持只有老函數(shù)集基本都能用讀入內(nèi)存占用相對(duì)低相對(duì)高這張表最有用的兩行是行數(shù)上限和樣式上限。行數(shù)超了不會(huì)報(bào)錯(cuò)會(huì)直接截?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)入的對(duì)賬單里時(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)再?zèng)Q定是格式化日期還是原樣輸出數(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)在某些版本會(huì)關(guān)閉傳入的流之后Response.Body再寫就寫不進(jìn)去了另一種是同一個(gè)MemoryStream寫完沒Position 0就直接當(dāng)讀的源用。 解決寫文件的流自己using管好生命周期別依賴庫來關(guān)Web 場(chǎng)景用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所有行和單元格對(duì)象都駐留在堆里一個(gè)單元格對(duì)象幾十字節(jié)五萬行乘二十列就是一千萬個(gè)對(duì)象。 解決換成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是工作簿級(jí)別的共享對(duì)象但很多人習(xí)慣在循環(huán)里CreateCellStyle()之后只對(duì)當(dāng)前單元格賦值同時(shí)又在別處CloneStyleFrom覆蓋了屬性結(jié)果樣式對(duì)象被復(fù)用后互相污染。 解決樣式只在工廠里創(chuàng)建一次循環(huán)里只做cell.CellStyle cachedStyle賦值確實(shí)需要“繼承再加一點(diǎn)差異”的用CloneStyleFrom克隆出一個(gè)新對(duì)象并單獨(dú)緩存別在原對(duì)象上改。6. 二次開發(fā)把示例收成一層能復(fù)用的導(dǎo)入導(dǎo)出示例代碼寫到后面你會(huì)發(fā)現(xiàn)每個(gè)業(yè)務(wù)實(shí)體都在重復(fù)“讀表頭 → 找列 → 轉(zhuǎn)類型”這套動(dòng)作。我一般會(huì)加一個(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(訂單號(hào))] 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)證方式我用往返測(cè)試不落盤、跑得快[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(訂單號(hào)); 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è)測(cè)試我建議再補(bǔ)三個(gè)邊界樣本一個(gè)帶合并單元格的表頭、一個(gè)日期列為空的行、一個(gè)金額列是公式的表。前兩個(gè)驗(yàn)證判空邏輯第三個(gè)驗(yàn)證CachedFormulaResultType分支。這三個(gè)樣本跑通線上八成的導(dǎo)入投訴基本能提前擋掉。從那以后我每次接 Excel 相關(guān)的需求都會(huì)先問清三句話讀進(jìn)來的是什么格式、寫出去給誰用、最大多少行然后才動(dòng)手寫第一行代碼。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久久久久99999国产精品| 精品射1999| 女生自91网站| 日韩三级网址| 91丝袜在线视频| 国产十八禁视频| 青操影院| 国产日韩美女小穴视频网站不卡| 九九九九九九精品| 色婷婷六月丁香七月婷婷| 欧美成熟性爱精品| 精彩视频日韩| 久久春色| 狠狠干,狠狠操| 99999无码| 久久久久国产精品人妻aⅴ天堂| 97久久超碰日韩精品| 麻豆视频一区二区| 久草网站免费在线观看| 91色爽欧美| 日韩一级二级三级免费看完整版国语版 | 嫩呦国产一区二区三区AV| 激情小说五月天| 区一二区日韩亚洲乱码av电影| 天美传媒av在线| 国产精品 视频| 天天干天天狼在线视频| 亚洲欧美日韩电影网站一区 | 精品视频久久久久九九九九9999 | 韩国一级做A片免费的| 五月天婷婷综合网| 欧美天天干| 综合色色婷婷| 啊啊啊好想要| 99www.bibizy香蕉资源国产一区二区三区高清| 亚州欧美综合| 激情久久久| 亚洲国产青青| 激情专区综合| 欧洲性爱无码区| 国产夜夜艹| 日韩在线欧美精品一区二区| 亚洲综合夜色| 亚洲码专区| 亚洲色图欧美另类在线| 人人摸人人摸人人干| 日本大香蕉综合网红本杳社区| 乱伦3P视频| 精品美女少妇一区二区| 成人A片男人的天堂| 人人人人插| 99999亚洲| 色月天AV导航| 色九区| 澳门黄片一香蕉视频| 欧亚久久偷拍视频| 激情五月婷婷综合| 国产久久av| 91殴美| 日本 情色 1区2区3区| 九九无码视频| 可以在线观看的黄色网址| 怡春院久久| 美国久久一二三四| 久久久久久久久久久97| 亚洲人妻AV| 国产绿奴视频在线观看| 神马九九| 91搡老女人老妇女老熟女歌词翻译| 成人日本精品九区| 亚洲欧美九九| 美女黄色一级A视频| 久久精品中文字幕观看| 一区二区三区高清天码| 国产无吗在线播放| 国产狂喷潮在线精品| 国产后入清纯| 国产熟女一区二区| 成人精品久久| 熟女人妻精品一区二区视频 | 91一区二区三区蜜桃| 久久久久久网址| 色悠久久久av| 久久精品成人| 人妻第一页| asc国产精品| 大香蕉色网| 91视频成人福利网站在线一区 | 国产一级作爱毛片| 人妻中文字幕日韩电影| 图片区小说区| 伊人久久大香线蕉无码| 无码乱人伦中文视频| 久久av成人无码免费| 亚洲精品国产熟女| 青青操综合网| 中文字幕五区| 国产农村妇女精品一| 丰满人妻一区| 高清无码学生妹高潮| 欧美性夜| 无码av永久免费专区网站| 国产亚洲女v在线观看| 动漫区日韩区欧美区| 日韩欧美视频青青| 亚欧美综合网。| 国产蜜臀精品一区二区尤物| 偷拍精品一区二区三区| 日韩人妻精品中文字幕| 亚洲久久久久| 国产人妻天天干精品| 天天日天天爽| 色五月激情AV在线| 人妻二区| 久操B网| 青青草啪啪网| 亚欧高清| 99国产精品人妻人伦| www. 男人天堂成人在线| 国产精品香蕉| 大伊香蕉在线视频免费| 日韩性爱免费观看视频| 亚洲一区二区三区AV无码| 青青国产精品在线| 懂色Av一区二区三区| 啪啪免费| 欧美高潮| 欧美日韩国内不卡| 性爱AV天堂| 黄视频免费| AV中文在线可看| 日韩欧美久久婷婷网站| 亚洲性爱无码乱伦av| 97爱亚洲综合色| 无码国产精品96久久久久孕妇| 久操大香蕉| 四虎免费视频| 亚洲精品 大香蕉| 懂色AV蜜臀无码精品APP| 亚洲天堂男人在线| 免费1级a做爰片观看| 国产农村妇女一区二区| 91热| 日韩AV一区二区三区三州三州| 97操| 精品国产一区二区三区久久久蜜臀 | 淫荡熟女乱伦网| 久久超碰、| 岛国色情视频在线观看| 亚洲交换| 中文字幕久久亚州无码| 欧美性爱在线无码| 绯色一区二区三区不卡少妇 | 免费观看啪视频| 成人精品水蜜桃久久久久久久| 国产超碰人人爽人人做| 久久婷婷电影网| 国产精品91ai| 超碰 97国产熟女| 婷婷丁香九月| 日韩色香| 国产一区二区久久| 亚洲第一页欧美| 欧美黄片欧美黄片xxx| 中文字幕乱妇免费视频| ...日韩成人一区二区三区字幕| 国产 v乱码一区二| 插穴性爱视频在线观看| 天堂69亚洲精品中文字| 国产精品96| 女上位精品在线| 美女高潮视频91| 肥臀熟女福利视频一区二区| 精品视频久久久久九九九九9999 | 欧美丰满少妇xx高潮| 国产久久一区二区| 职场同事知名国产国产精品久久欧美日韩 | 黑人中出21连凳花野真衣| 久久久久成人亚洲国产| 日韩丰满熟妇| 欧美视频一区二区在线| 久久 亚洲 日韩 人妻| 国产 码在线成人网站| 国产一区二区欧美日本| 国产精品免费美女视频| 亚欧高清在线| 99日免费视频中文字幕| 性老妇一区二区三区| 亚洲无套久久嗯嗯| 99xav| 中文字幕78| 婷婷亚洲综合| 欧美欲色| 91美女视频直播| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 自拍视频一区在线观看| 国产美女高潮| 国产精品人人爽人人做可爱福利| 国产精品自在自拍视频| 亚洲1区| 91精产一区二区三区| 亚洲精品视频二区| 91久久久老司机| 中文字幕三四五区| 一区二区三区 日韩欧美| 五月天啪啪| 亚洲天天影视色综合| 好爽视频在线观看| 国产激情在线观看| 欧美色图人妻| 乱伦a片视频| 五月天婷婷成人网| 大香蕉手机在线| 亚洲囯产精品女人久久久| 久悠悠av| 国产精品懂色tv影视免费观看| 91动漫操逼视频| 亚州 综合 色图| 亚洲图片欧美色| 国产最新AV| 国产白丝网站| 黑操B| 亚洲熟女人妻中文字幕一区二区 | 日日夜夜狠狠| 欧美亚洲自拍另类人妻| 中文字幕制服欧美久久一区| α√在线| 91男人综合| 人人透人人操| 亚欧毛片基地国产毛片基地| 天天综合网1| 亚洲精品国产无码高清| 五十路熟女,国产欧美精品区一区二区三区| PMv在线观看| 午夜天堂精品久久久久91| 天天日熟妇| 午夜男人一级A片7777| 九九九色| 加勒比综合a∨| 久久美女国产| 九九九九国产| julia ann久久| 99婷婷| 不卡中文字幕aⅴ在线| 观看视频图片一区二区三区| 欧美国产伊人久久久久| av爱爱爱| 综合久久99| 精品一国2| 亚洲欧洲小说图片视频| 被体育老师抱着c到高潮| 亚洲高清91| 黄色免费网| 亚洲做性| 欧美影音在线| 欧美色图私拍91| 97国产成人精品免费视频| 色悠久| 日本99一区二区| 狠狠干,狠狠操| 91强热人妻| 97色伦97色伦国产欧美| 俄罗斯及免费在线看| 亚州熟妇精品| 综合av影片| 亚洲欧洲精品成人| 国产蜜臀精品一区免费尤物| 激情开心五月天| 亚洲一区二区中文字幕| 亚欧成人综合影院| 日本熟妇人妻中出视频| 中文字幕精品一区欧美| 欧美色视频在线| 国产精品久久久啊| 国产精品久久久久无码Av网曝门| 97人人夜| 久久黄黄| 中文字幕av亚洲在线| 日韩人妻免费精品| 吻戏激情性巴克| 91N欧美| 欧亚乱色熟一区二区三四区| 麻豆AV96熟妇人妻| 亚洲性刺激| 成人性爱免费播放| 丰满人妻无码一区二区三区| 99久久99九九99九九九| 丝袜喷水在线| 清纯唯美综合| 福利操逼| 操人妻少妇中文| 激情图片伦理国产一区二区日韩| 91热| 日韩999| 极品粉嫩一区二区| 夜间福利片1000无码| 国产亚洲精品无码三区| 婷婷五月成人| 熟妇高潮二区三区| 翔田千里一区二区三区奶水| 五月婷婷无码| 久久熟女精品不卡一区| 成人免费在线网站| 日韩中文字幕av在线播放| 夜夜性| 福利视频一区二区微拍| 五月丁香综合激情| 欧美热图99| 久久久 国产精品| 91性生活久久久| 色妇综合网| 精品国产www久久| 秋霞午夜视频一区二区| 欧美aa一级片| 日韩资源网| 99热官网| 国产精品内射婷婷一级二| 一级啊性爱在线视频| 经典丝袜一区| 免费看A片毛毛片在线播| 久久伊人在线五区| 黄色激情电影在线观看| 免费看污网址| 国产成人无码a| 在线 亚洲 网爆 自拍| 色色毛片| 操死我了啊啊啊| 欧美极度丰满熟妇hd| 十八禁黄色| 色999;丁香五月| yazhououmeizongya| 色爱综合网| 十八禁视频一区二区| 91久久伊人婷婷青青草| 国产99久久99热这里只有精品15 | 欧美成人性爱视频大全| 91精品人| 精品乱码久久久久| 色色综合网站| 东北丰满熟女国产一区| 91宗合网| 亚洲天堂电影网| 嗯啊不要在线| 久久久久9| 亚洲国产成人精品久久久国产成人一区二区 | 欧美综合色,www| 99r九九| 全球成人中文在线| a片偷拍视频| 亚洲男人的天堂va亚洲男人社| 亚州乱码中文字幕综合久久久| 日韩欧美国产高清视频| 欧美日韩大香蕉| 精品少妇高潮久久| 大学生口爆吞精| 91操熟女视频| 欧美激情在线观看视频| 97超碰色中文字幕| 偷拍亚洲视频一区二区三区四区| 久久綜合很很很| 台湾佬中文娱乐自偷自拍| 色综合尤物| 久久久久久久国产a∨| 综合久久六月久久婷婷| 欧美亚洲国产91在线| 国产精品白领在线观看| 日日操免费视频| 狠狠躁伊人中文字幕| 偷拍亚洲情色| 久久久九| 97精品视频免费| 亚洲欧美综合色| 在线欧美69V免费观看视频| 亚洲AV在线资源| 青青久久久| 狠狠搞 亚洲91| 日夜伊人网| 天堂资源站| WWW美腿丝袜香蕉中文| 国模久久在线| 精品一区二区国产日韩| 精品欧美不卡在线播放| 人妻丰满熟妇一区二区三| 无遮挡一级毛片视频免费的| 夜夜天天噜狠狠爱2021| 这里只有精品视频| www.99热在线只有精品| 东北操逼| 中文字幕丰满人妻日本| 韩国黄片aaaa| 夜夜狼人妻| 97精品97久久| 99久久久无码国产精品性啊聊| 在线播放免费av福利片| 亚洲欧美激情在线视频| 欧美亚综合色图| 欧美在线中M| 嗯嗯啊啊操我| 国产日韩欧美三级片| 无码99| 三级色影综合网| 密乳无码| 你草精品在线视频| 密臀视频三区免费网站| av日韩在线观看电影| sss视频华人在线| 久久线上视频免费看| 超碰国产精品久| 日本精品成人无码| 最新日产中文在线麻豆| 睡产熟女乱伦| 有码免费观看| 东京热一区二区三区四区五区六区| 久久熟女人| 欧美日日夜夜| 色五月天AV| 九九九九九九九九九九九九九九九女| 色欧洲97| 国产精品96| 韩三级a视频在线观看| 一区二区三区高清天码| 国产亚洲精品自在线亚洲情侣| 98一区二区精品| 久久男人网| 天天日天天干天天摸天天操| 一起草三级AV电影在线观看| 亚洲图片婷婷五月天| 国产自制av蜜乳| 嗯嗯嗯,草死我| 久久露脸国产老熟女| 久久这里都是精品| 我爱搞逼综合网| 亚洲激情视频| 操逼逼无码| 99久久无色码| 国产区在线| 午夜福利激情在线视频| 欧美毛片在线网| 久久久久921| 91东北熟女| 久久久精品视频免费观看| 大鸡吧尹人在线| 九九人妻| 大香蕉亚洲中文| 在线97视频| 国产精品九九九| 亚洲图片91| 日韩精品碰碰| 不卡九肏| 国产精品ww久久| 国产女人成人精品视频| 欧美91在线+|+欧美| 综合久久9| 午夜一区| 成人无码在线超碰网| 男人的天堂不卡一区二区 | 日韩性爱再线视频| 伦在线97| 午夜福利激情在线视频| 久久综合乱子伦国产免费| 67914在线精品观看| 18+91网站| a v网站在线播放| 久久超碰免费的| 爱爱动态60秒| 久久伊人在线五区| 百度百度日本操逼| 啊啊啊啊啊啊啊国| 蜜臀久久99精品久久久久久无删减| 无码乱人伦中文视频| 天天色怡春院| 成年人黄色小视频网站| 伊人 俄罗斯 a v| 欧美一区二区福利在线| 嗯嗯,好大,好爽,好骚| 日本高清免费一本视频在线观看| 蜜桃久久久久久久| 97无码视频在线播放| 国产超碰国产97| 伊人91| 女优视频第10页| 啊啊嗯嗯好爽| 日日夜夜骚| 91精品国产91久久福利| 磁力99AV| 精品国产人成在线| 久久久96精品| 国产11页| 久久无码一区二区二三区性色| 亚洲区限制级| 日本一级性爱| 啊啊啊好舒服视频| 人人摸人人干| 国产乱人伦AVA麻豆软件.| 亚洲综合伊人| 野狼激情网| 老外又粗又长一晚做五次| 超碰综合色| 日韩美女,国产传媒,视频一区| 加勒比综合a∨| 亚洲操逼网| 亚洲欧洲成人在线电影| 偷拍超碰| 五月香婷婷| 秋霞 色色| 美日韩在线不卡人妻| 亚洲Av无码成人精品国产| 超碰美国| 国产农村妇女精品一| 亚洲美女自拍偷拍视频| 亚洲色图欧美色图另类图片| 亚洲www91| 六月丁香啪啪啪| 国产高清成人免费视频| 99re在线视频这里只有精品| 日韩人妻操B| 亚川综合视频| 大香蕉中文在线| 精品乱码久久久久| 亚洲天堂99| 人人 操人人 操人人| 欧美熟妇精品黑人巨大一二三区| 乱伦av国产| 欧美极品| 四虎在线观看网站| 神马久久中文字幕| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 天天碰久久入| 国产精品乱人伊人网| 国人欧美精品一区二区| 91综合熟女| 伊人96在线| 国产精品第二页| 91操人视频| 91强热人妻| 一区二区三区美女超清| 天天久久久久久| 青春草A| 大香交伊人网| 欧美日韩第一页| 不卡av在线中文字幕| 亚洲影院无码在线| 97在线免费| 久久久久久人体| AV99热18这里只有精品| 99热在线不卡| 亚洲色性情三级| 久久久久久久人妻| 在线只有精品| 丁香六月婷婷综合| 色爱国产| 婷婷午夜| 国产欧美日韩在线不卡第一页| 亚洲少妇综合在线播放| 久久久久久久综合,国产| 国产亚洲禁久一区二区| 在线观看 99热| 看黑人AV不卡| 怡红院怡春院| 色婷婷蜜臀av| 亚洲一区二区三区麻豆传媒| 国精品一区二区三| 亚洲精品一二三四区| 亚洲成人在线播放| 丁香激情五月| 亚洲免费精品一区| 九九玖玖精品| 人人操天天爽| 女人爽到高潮潮喷18禁网站| 久久久久国产一区二| 一区二区三区精品久久| 8050无码八戒| 婷婷丁香六月天| 屌逼麻豆| 高凊专区人人操| 中文字幕一区二区三区蜜臀| 亚洲色图欧美色图制服丝袜 | 91丝袜在线视频| 精品一区二区三区四区外站| 人妻 欧美 中文| 日日做夜狠狠爱欧美黑人| 97超碰人操| 啊嗯嗯啊好大好爽| 99热在线只有精品| 久久精品一区二区三区四区五区| 日韩啪啪视频| 亚洲国产欧美另类自拍| 伊人国产av| 亚洲图片在线| 96精品久久| 口爆综合网| 97精品国产97久久久久久免费| 一区二区首页| 亚洲在钱| 久久色精品视频在线| 肏逼福利网站| 蜜臀久久久99久久久久| 国产精品久久| 最近2019中文字幕国语免费版| 26uuu国产亚洲综合| 新婚人妻扶着粗大强行坐下| 91大学精品激情戏| 天天摸夜夜摸| 91精品国产91久久久久久久久久久久| 国产老太乱伦一区| 亚州免费啪啪视频| 97资源超碰| 天天操天天看| 欧美狠狠干| 国产精品香蕉热久久新品| 天天综合91在线| 久久偷拍人| 91色宗合| 日韩AC| 欧美一区91大爱| 超碰97导航| 在线毛片片免费观看| 亚洲一区二区三区AV无码| 淫色网综合| 99少妇| 久久精品国产99精品亚洲蜜...| 日本岛国黄色网址| 欧洲精品欧洲精品| 伊人国产成人av网站| 你懂得91| 日本高清熟女久久一区| 午夜性刺激视频免费观看| 国模少妇一区二区三区| AV99热18这里只有精品| 天美91| www.婷婷| 欧美综合色| 大香蕉黄色一级片免费看| 天天射网| 97欧美| 操逼操操操91| 吉川爱美亚洲二区在线| 国产精品久久久久久亚洲色欲| 日本三级黄页| 97在线/亚洲| 国产精品亚洲一区二区三区四区| 久久久久久久六六| 青草草免费网站av| 青青操在线亚洲视频观看欧美在线| 酒色综合网| 欧美十八禁在线看| 青青伊人加勒比海| 17c在线成人免费A片观看| 亚洲情色一区综合| 成人小说另类在线| 精品视频123区小说区| 亚洲欧美首页| 欧亚乱色熟一区二区三四区| 欧美熟妇精品黑人巨大91| 色播综合| 亚洲国产97| 欧美色图天堂在线| 97超碰精品| 欧美少妇一区二区三区| 男啪女色黄无遮挡免费观看| 在线 亚洲 网爆 自拍| 国产精品日韩在线一区| 高凊专区人人操| 美女诱惑一区| 亚洲五区熟女| 99久久婷婷丁香| 欧美色综合图片| 综合色99| 无码78| 91色碰| 1769国内精品视频| 91黑丝操| 国产版a级片直播在线| 992视频一区| 日韩伦理视频| 99精品国产户外露出| 成人综合网 欧美| 天天操天天射天天日| 新视频sss国产| 亚洲超碰在线| 91被操| 天天操美美| 91操碰| 欧美日韩午夜精品一区二区三区| 新精精品久久精品| 亚洲欧美日韩综合在线尤物 | 综合五月婷婷亚洲一区| 麻豆人妻偷人精品无码视频| 日韩久久三区| 国产中文大片资源中文字幕| 久久久草草精品| 精品久久青青草| 中文字幕一区电影在线观看| 美女天天干| 亚洲AO在线| 中文字幕一区日韩精| 日韩97P| 狠操91,com| 欧美熟爽综合| 一起草三级AV电影在线观看| 亚州九九九精品视频| 精品妇女一区二区三区| 天天干人人干天天日97| 色综合大香蕉| AV中文字幕剧情1区2区3| 六六久久日韩不卡| 操逼天美3区| 99精品人妻| 精品女同一区| 嗯~啊~快点 死我视频| 人人操人人狠狠操| 亚洲最大成人a毛毛片| 国语精品av| 美女黄码视频午夜| 天色综合网| 天天色香欲综合网| 久久久久国产精品喷潮免费观看臀 | 中韩中文字幕在线观看| 青青草成人视频在线观看二区 | 91痴汉| 欧美日动态视频| 伊人97色天使| 超碰免费在线| 亚洲AV无码成人精品久久| 操B视频日韩无码| 国产日本一区二区三区蜜臀在线观看| 人妻熟女一区二区| 精品久久99| 亚洲欧洲另类| 人人爱操| www.99热| 欧美顶级黄片AAAAA在线免费看| 亚洲国产av中文字幕久久| 久久精品国产亚洲5555| 超碰97男女| 天天天干977| 大香蕉中文网| 午夜欧美精品久久久| 天天操熟妇| 天天爽入口| 白嫩妹子国产骚| 天美麻豆黄色录像| av草草在线电影| 中文字幕精品三级久久久| 精品国产一区二区三区av在线资源| 久久五月视频| 丁香六月婷| 男人天堂毛片| 加勒比海成人视频网| 美女黑人91神马| 欧美日韩亚洲电影| 精品人妻一区二区乱码一区二区| 伊人网在线观看| 亚洲欧美setu| 久草线上视频免费看| 亚洲性感丝袜诱惑在线观看| 中文字幕在线第二页| 精品少妇一区二区| 女人香蕉久久毛毛片精品| 91A欧美电影网站| 亚洲中文人妻色| 九一性生活免费视频| 亚洲日韩狠狠撸视频| 国产自产22区| 97se亚洲综合自| 一道α片欧美| 蜜桃午夜视频一区二区 | 中文字幕在线观看AV| 综合网欧| 久久精品99| 中文字幕精品三级久久久| 国语精品av| 熟女乱3伦999| 嫩草一区二区在线观看| 亚洲综合中文字幕有码 | 极品美女嘿咻| 天天干18禁| 中字幕人妻一区二区三区| 亚洲一级特黄大片在线播放91| 久久国产AⅤ| AV免费在线播放一区| 99re视频在线观看这里只有精品| 亚洲成人一二三区| 97一区二压| juliaann丝袜| 久久毛卡| 另类 日韩 熟女| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 人妻丝袜美腿中文字幕| 久久久久久999| 99热在线不卡| 国产sv美女内射| 搞中出久久| 亚洲精品视频在线播放| 久久精品国产99国产精品亚洲| 欧美色图亚洲色,麻豆| 日本在线观看网址| 睡产熟女乱伦| 少妇人妻精品| 青青色在线观看| 黄色区免费观看中文字幕| 性色一线| 限制级中的三级片中的黑粗大屌屌日人妻熟女| 精品一级毛片在线观看| 欧美黑人精品一区二区| 色九月综合| 性色A∨91| 婷婷伊人五月| 久久人妻视频网| 色偷偷人人玩人人舔人人操人人摸人人爽 | 欧美日韩久久精品爱爱| 亚洲成a人片在线观看中文!!!| 91久精品| 久久精品成人| 亚洲av影院在线观看| 国产性刺激| 九热超碰| 日韩无码黄色片| 国产成自自拍在线观看| 人人摸人人入| 亚洲熟妇极品| 人妖欧美一区二区| 欧美亚洲日本视频久久久| 91丝袜激情在线| 久久久久久无码人妻中文字幕| 中国少妇XXXX做受| 西西美女视频网| 日本操逼aaaaa| 91neishe| 97在线免费观看| 电影69乱码96| 青草成人免费视频一com| 国产在线精品偷| 久久精品六区| 色色色99| 精品玖九九久| www狠狠| 熟妇人妻精品一区二区| 无码人妻毛片丰满熟妇精品区 | 久久久亚洲Av| 日韩性爱免费视频在线网站| 九九色精品| 久久伊人影院| 亚洲图片 91| 精品午夜福利导航| 中文字幕在线播放2中文字幕在线观看2| 色小视频蜜乳| 亚洲精品蜜桃久久久| 国产又爽又黄| 欧美丝袜亚洲| 五月天婷婷欧美三区| 国内一区二区免费| 96精品久久久久中文字幕| 高清国产精品福利网站| 青青操在线亚洲视频观看欧美在线| 色欲久久久久综合网| 97干天天| 少妇xx精品| 激情综合 婷婷五月 红杏| 久久久一区二区三区四曲免费听 | 综合色一区三区二区| 久久久久日本视| 久久中文字幕一区不卡| 国产人妻一区二区三区欧美毛片| 国产精品久久久无码AV网站| 欧美日韩亚洲少妇寂寞影院正在播放| 天天综合精品| 国产精品剧情| 日本大香蕉| 欧美日韩操逼嗦吊| 热99这里有精品综合久久| 综精品久久久aaaa| 国产精品制服丝袜清纯唯美| 999国产精品999久久久久久| 蜜臀久久99精品久久久老,,| 91福利网在线观看| 欧美在线综合| 尻女朋友一夜| 美女国产一区二区久久| 日比av无码| 欧美日韩婷婷中文| 99久久婷婷国产综合| 最新无码国产| 国产诱惑| 97天天搞在线| 日本熟妇人妻中出视频| 免费成人自拍视频在线| 四虎884a| 天天日天天色| 欧美一区二区三区另类精品| 花花AV导航| 国产精品久久久久久久久久久久久久久久久久 | 九九在线精品| 国产探花日韩援交| 天天综合网在线91| 老司机午夜福利视频一区二区| 色蜜AV| 人妻中文字幕精品无码| 日本大香蕉综合网| 99热18这里只有精品| 日韩AV色图| 亚洲成?V人片在线观看福利| 日韩中文字幕视频| JuliaAnn丝袜熟女系列| 99热99re6国产在线播放| 自拍盗摄一区| 香蕉久久国产AV一区二区| 熟女这里只有精品6| 日韩啪啪视频| 麻豆天天躁天天揉揉AV| 亚洲人码13| 国产AV天美| 激情99| 国产亚洲99久久精品| 全免费a敌肛交毛片免费| 亚洲国产精品无码AV久久久| 97资源站国产精品| 婷婷五月天色网| 99后入| 伊人aaa| 欧美日韩免费专区在线| 亚洲有码 欧美精品| 日本三级日本三级99| 亚洲精品a人片在线观看视| 啊啊啊慢点| 亚洲精品不卡一二三区| 亚洲诱惑| 久干网| 日韩人妻精品中文字幕| 性色一线| 青青网三级视频| 亚洲天堂区| 午夜精品久久99蜜桃的功能章节| 日本熟妇色熟妇在线视频播放| 91美女在线视频| 午夜精品久久久久久久99热影院| 人妻在线中出视频| www.91色综合| 超碰久久性爱| 观看视频图片一区二区三区| 人妻密肉在线观看| 激情五月激情综合网| 天天插天天操| 亚洲人人操| 夜夜嗨AV一区天天| 久久理论字幕视频| 超碰亚洲欧美日韩无| 黄色大片一区二区密桃丝袜| www.操| 欧美暴力猛交| 伊人久久亚洲色欲综合网站 | 久9re热视频这里只有精品| 美女裸体无遮挡永久免费观看网站| 97在线免费观看| 激情综合网亚洲| AV一起草在线| 午夜电影在线观看无码专区| 天天天天天天天天天天干美女 | 黑丝日韩av丝袜av| 成人在线午夜视频一区| 亚洲好色人妻| 超碰地址久久| 久久久久少妇| 一级毛片久久久久久久女人18| 91在线视频观看国产| 久操精品网| 免费观看欧美日韩操逼视频| 欧美黄页在线| 国产25页| 九九九不卡| 日韩兔费看黄片| 国产高清精品一区二区三区毛片| 日本操逼视频导航| 精品色色| 日韩ab网 | 蜜臀无码一区二区| 啊啊啊啊免费视频| 国产精品分类在线观看| 亚洲图片日本AⅤ欧美在线| 3p国产欧美99热| 九九九九九九亚洲| 精品无码产区一区二| 亚洲人妻爽爽爽| 久草精品国产99| 国产成人精品日本视频| 天美传媒av 在线| ji熟女.com| 青娱乐淫乱1314| 猛交交| 九九黄色视频在线观看| 少妇毛片久久| 久久天天躁日日躁狠狠躁 | 中文字幕片| 99xav| 在线 欧美 亚洲| 人人爱人人乐人人操| 久久精品店| 国产一级做a爰大片免费久久| 婷婷激情五月| 色婷婷久久综合超碰| 亚洲激情深爱文学小说网站| 亚洲操操| 青青草精品| 丝袜美腿丝袜| 久久黄色视频一区二区三区 | 国产亚洲人妻综合日韩 久久| 欧美日韩大陆黑人少妇99| 亚洲久草AV色图| 欧美性生活男人的天堂| www.91人妻.com| 天天流夜夜操| 中日992视频| 日语五十路和六十路亚洲国产精品| 自拍偷拍2025在线观看| 久久爽爽精品| 97中文热色| 粉嫩不卡一区二区性爱| 天美一二三在线观看Av| 日本97久久| 国产h片在线观看视频| 天天插天天干| 99精品无码| 思思热影视| 熟女天天干| 日本操逼视频在线| 长长久久曰曰夜夜成人网| 狠狠躁日日躁夜夜躁A| 国产又黄又粗的视频| 18精品一区| 97碰碰色| a网站免费观看| 91操熟女视频| 国产一区二区精品久久99| 亚洲AV无码久久精品蜜桃小说| 成人怡红院| 日本岛国黄色网址| 校园春色 亚洲| 黄色免费一级在线毛片| 人妻天天爽夜夜爽爽| 亚州综合网| 伊人99热| 欧美偷拍| 亚洲有薄码区日本系列中文字幕| AV男人天堂网| 中文字幕成人理论在线| 9ⅰ久久久天天| 精品亚洲黄色片 国产精品导航一区二区| A啊啊在线观看| 免费福利视频中文字幕| 在线人妻熟女一区二区三区四区五区| 99久久无码| 欧美熟女激情| 国产综合日韩伦理| 91骚妇| 盗摄女人妻在线| …中文字幕亚洲乱,97人妻无码费视…| 999国产精品999| 亚洲黄色电影| 婷婷啪啪| 中文字幕丰满子伦无码专区在线视频最新 | 好爽要喷了| 国产精品探花色| 加勒比人妻综合| 国产三级电影免费观看| 欧亚揄拍偷拍精品视频| 人妻中文字幕日韩电影| 欧日韩一二三f区| 国产成人免费观看在线视频 | 九九黄色网| 亚州欧美综合| 99只有精品| 人人性爱视频免费| 青青草在线成人视频| 欧美aa一级片| 国产suv精品一区| 一区二区偷拍拍视频| 国产精品精品系列在线观看| 18岁禁 茉莉成人久久| 美国aaaaa一级黄片| 97超碰伊人| 国产欧美在线观看免费观看| 久久久久一本一区二区青青蜜月| 黄色人人| 日韩欧视频| 麻豆精品A片免费观看| 夜夜天天噜狠狠爱2021| 日本在线伊人啪啪| 天天天天天天天天综合| 欧美视频一区二区在线| 激情小说亚洲| 色香综合天天影视综合 | 97欧美色| 4141514逼喷水三级片| 国产Aα| 色五月AV| 国产亚热在线久久| 精品国产乱码久久久久久影片| 超碰国产精品无码| 国产三级片在线观看| 色好看av| 五月婷婷色| 色哟哟511老熟女| 男人的天堂1024| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 日本一区99| 五月丁香激情啪啪| 欧美性生活免费网| 好爽视频在线观看| 亚洲麻豆18发?| 麻豆福利视频导航| 丁香九月激情| 亚洲一卡2卡3卡4卡乱码网站| 国产强奸乱伦无码视频| 91日日夜夜| 精品亚洲俞拍视频一区| 久久亚洲影院一区二区| 伊人五月天婷婷| 色欧美综合| 深夜激情 | 五月婷婷六月色| 东京热男人的天堂精品| 精品91| 亚州综| 亚洲 欧美 日本 国内 首页| 欧美狠狠鲁| 一区,二区,三区网站| 99免费在线视频| 最新av中文字幕高清| 亚洲97| 999综合网| 性欧美91| 久热99999| 日本熟妇色熟妇在线视频播放| 蜜臀AV成人精品蜜臀AV久久| 开心五月天激情网| 色九九综合| a在线视频免费观看| 破苞ⅩXXX性无码动漫无码| 国产在线强奸视频| 伊人一区二区在线播放| 99久久亚洲精品无码毛片潘甜甜| 在线天堂资源亚洲| 国产91美女视频| 欧美另类丝袜熟女| 上床啊啊啊| 精品国产乱码久久久A| 青青草色AV| 日日骚av| 亚洲色图A| 精品无吗m| 久久久人妻| 久久岛国| 91精片| 国产拍偷精品网站| 天堂无码| 国产美女口爆吞精视频| 久久久精品中文字幕爱豆| 久久久99免费| 国产精品探花色| 精品亚洲黄色片 国产精品导航一区二区 |