久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

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 開(kāi)發(fā)者這份資料圍繞 NPOI 庫(kù)給出可直接參考的讀寫示例覆蓋舊版 .xls 與新版 .xlsx 兩種格式既適合剛接觸 NPOI 的新手入門也適合需要封裝通用工具類的中級(jí)開(kāi)發(fā)者對(duì)照借鑒。壓縮包共 15 個(gè)文件以 12 個(gè) dll 依賴庫(kù)為主另有 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 到底解決什么問(wèn)題后臺(tái)要導(dǎo)一份對(duì)賬單服務(wù)器上沒(méi)裝 OfficeMicrosoft.Office.Interop.Excel一跑就拋 0x800A03EC這個(gè)場(chǎng)景我見(jiàn)過(guò)不止一次。換個(gè)角度看C# NPOI 操作Excel 最省心的地方恰恰是它根本不碰 Office——純托管庫(kù)在進(jìn)程里直接拼 xls/xlsx 的二進(jìn)制結(jié)構(gòu)服務(wù)器裝不裝 Office 都能跑。它一套 API 覆蓋兩種格式老的.xls走 HSSF新的.xlsx走 XSSF數(shù)據(jù)量大再換 SXSSF 流式寫十萬(wàn)行也不至于把內(nèi)存吃穿。適合做報(bào)表導(dǎo)出、批量數(shù)據(jù)導(dǎo)入、模板填充的后臺(tái)服務(wù)、桌面工具和接口項(xiàng)目如果你只是偶爾手動(dòng)改個(gè)表那確實(shí)沒(méi)必要上它。2. 技術(shù)選型與工程結(jié)構(gòu)HSSF、XSSF、SXSSF 三套模型怎么分工打開(kāi) NPOI 的命名空間會(huì)看到一堆HSSF開(kāi)頭的類第一反應(yīng)通常是“這不是 Java 那套的翻版嗎”。確實(shí)接口模型沿用了IWorkbook/ISheet/IRow/ICell這層抽象好處是同一份業(yè)務(wù)代碼換個(gè)實(shí)現(xiàn)類就能讀寫不同格式壞處是新手很容易在new的那一行就把類型寫死后面想兼容.xls就得大改。選型這一步基本決定了后面會(huì)不會(huì)返工所以拆代碼之前先把模型說(shuō)清楚。2.1 三種工作簿模型的邊界模型對(duì)應(yīng)格式內(nèi)存形態(tài)適用量級(jí)主要限制HSSFWorkbook.xls全量駐留內(nèi)存幾萬(wàn)行以內(nèi)單表 65536 行、256 列XSSFWorkbook.xlsxDOM 全量駐留十萬(wàn)行內(nèi)看堆大小行數(shù)越多內(nèi)存線性上漲SXSSFWorkbook.xlsx滑動(dòng)窗口 磁盤臨時(shí)文件百萬(wàn)行級(jí)已刷出的行不能再改、不能刪行我的默認(rèn)規(guī)則很粗暴對(duì)方?jīng)]明確要求.xls一律XSSFWorkbook導(dǎo)出預(yù)估超過(guò)五萬(wàn)行直接上SXSSFWorkbook只有對(duì)接老系統(tǒng)、對(duì)方還在用舊版表格軟件時(shí)才回頭用HSSF。這條規(guī)則能省掉九成的兼容性扯皮。SXSSF 的代價(jià)必須提前說(shuō)清楚。它把已經(jīng)寫出去的行刷到磁盤臨時(shí)文件內(nèi)存里只留窗口內(nèi)的那幾百行所以你別想回頭sheet.GetRow(0)去改第一行——那時(shí)候它已經(jīng)在臨時(shí)文件里了GetRow直接返回null。需要回頭改的東西合計(jì)行、頁(yè)腳匯總要么放最后寫要么在窗口還沒(méi)刷出去之前處理掉。這個(gè)限制踩過(guò)一次就記住了。還有一個(gè)反直覺(jué)的點(diǎn)讀文件時(shí)判斷格式不要靠文件后綴用WorkbookFactory.Create(stream)讓它自己嗅探。業(yè)務(wù)方發(fā)過(guò)來(lái)的“對(duì)賬單.xls”里裝著的其實(shí)是 HTML 表格這種事我一年能遇到兩回。2.2 示例工程的分層與目錄結(jié)構(gòu)示例工程我按“核心邏輯不依賴 UI、不依賴文件系統(tǒng)”來(lái)切目錄長(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)、公式緩存上的行為并不完全一致光靠猜沒(méi)用必須有一份真實(shí)的舊格式文件反復(fù)驗(yàn)證。templates目錄則是給“模板填充”這種需求準(zhǔn)備的——表頭、樣式、合并單元格都在模板里做好代碼只負(fù)責(zé)往里塞數(shù)據(jù)行改樣式的時(shí)候不用改代碼。3. 從零跑通裝包、寫第一個(gè) xlsx、再讀回 xls這一章的操作照著敲就能跑起來(lái)目標(biāo)是把“寫出去”和“讀進(jìn)來(lái)”這兩條鏈路都走通一遍中間不留黑匣子。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 通過(guò)項(xiàng)目引用拿到 dotnet add src/NpoiExcelDemo.Core package NPOI dotnet add src/NpoiExcelDemo.Console reference src/NpoiExcelDemo.Core這里面幾個(gè)參數(shù)值得說(shuō)明。-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è)壓縮庫(kù)發(fā)布的時(shí)候別只拷了NPOI.dll就以為完事了缺依賴的報(bào)錯(cuò)信息通常很含糊只說(shuō)“未能加載文件或程序集”排查起來(lái)全靠猜。提示目標(biāo)框架選net8.0還是netstandard2.0取決于調(diào)用方。庫(kù)給多個(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); }逐段說(shuō)一下。CreateSheet傳的名字就是 Excel 底部的標(biāo)簽名超過(guò) 31 個(gè)字符或含[]:*?/\會(huì)直接拋異常。CreateCell(i)的索引從 0 開(kāi)始跳著創(chuàng)建也允許比如只創(chuàng)建第 0 和第 5 個(gè)中間的空單元格讀回來(lái)是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; // 整行被刪過(guò)就是 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 跑起來(lái)看一眼dotnet run --project src/NpoiExcelDemo.Console -- ./out/demo.xlsx ./samples/legacy.xls參數(shù)依次是輸出路徑和要讀的舊格式樣本。跑完先確認(rèn)三件事out/demo.xlsx能被正常打開(kāi)、金額那一列右對(duì)齊且能求和、legacy.xls的中文沒(méi)有亂碼。這三條過(guò)了說(shuō)明環(huán)境、依賴、編碼都沒(méi)問(wè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ù)字你卻去取字符串拿到的是空串或者直接拋異常這種問(wèn)題在日志里只表現(xiàn)為“某幾列讀出來(lái)是空的”非常難定位。FormulaError.ForInt把0x07這種錯(cuò)誤碼轉(zhuǎn)成#DIV/0!報(bào)表里帶著錯(cuò)誤碼有時(shí)候反而是有用的信息別急著當(dāng)成異常吞掉。注意DateCellValue在較新版本里是DateTime?老版本可能是DateTime。如果編譯報(bào)“無(wú)法將 DateTime 轉(zhuǎn)換為 DateTime?”說(shuō)明你手上的版本比較舊去掉?.就行。4.2 樣式復(fù)用ICellStyle 是共享池不是隨手 new 的樣式是 NPOI 里最容易被寫成性能問(wèn)題的模塊。工作簿內(nèi)部維護(hù)一個(gè)樣式池你每CreateCellStyle()一次就多占一個(gè)槽位.xls上限大約 4000 個(gè).xlsx大約 64000 個(gè)超了直接拋異常而且文件體積會(huì)以肉眼可見(jiàn)的速度膨脹——見(jiàn)過(guò)一個(gè)導(dǎo)出的表 800KB 數(shù)據(jù)配 60MB 樣式就是這么來(lái)的。正確做法是做個(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 自定義格式語(yǔ)法一致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)出十萬(wàn)行不能再用 XSSF數(shù)據(jù)量上去以后XSSFWorkbook把所有行都留在內(nèi)存里十萬(wàn)行乘以十幾列堆基本就撐不住了。換成 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刷盤頻繁寫十萬(wàn)行能明顯感覺(jué)到慢設(shè)太大比如 5000內(nèi)存優(yōu)勢(shì)就沒(méi)那么明顯了。我一般按 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(wàn)條數(shù)據(jù)導(dǎo)出成.xls最后只剩六萬(wàn)五而且沒(méi)有任何提示——這種 bug 上線之后才被發(fā)現(xiàn)返工成本極高。樣式上限則是另一個(gè)方向.xls到 4000 就拋InvalidOperationException堆棧里看不到你的業(yè)務(wù)代碼只看到 NPOI 內(nèi)部的Workbook.CreateCellStyle。5. 避坑與排查五個(gè)真踩過(guò)的問(wèn)題5.1 日期讀出來(lái)是 45000 這樣的整數(shù)現(xiàn)象導(dǎo)入的對(duì)賬單里時(shí)間列全是五位數(shù)用戶以為數(shù)據(jù)錯(cuò)了。 原因CellType.Numeric分支直接NumericCellValue.ToString()沒(méi)判斷日期格式。日期在 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)出的文件打不開(kāi)提示“發(fā)現(xiàn)不可讀取的內(nèi)容”現(xiàn)象瀏覽器下載下來(lái)的 xlsxExcel 打開(kāi)報(bào)修復(fù)提示點(diǎn)“是”之后內(nèi)容可能還在也可能丟了。 原因九成是流被提前關(guān)掉或者Position沒(méi)歸零。workbook.Write(stream)在某些版本會(huì)關(guān)閉傳入的流之后Response.Body再寫就寫不進(jìn)去了另一種是同一個(gè)MemoryStream寫完沒(méi)Position 0就直接當(dāng)讀的源用。 解決寫文件的流自己using管好生命周期別依賴庫(kù)來(lái)關(guān)Web 場(chǎng)景用MemoryStream寫完先ToArray()再輸出讀之前一律stream.Position 0。5.3 大批量導(dǎo)出時(shí)內(nèi)存飆升甚至 OOM現(xiàn)象導(dǎo)五萬(wàn)行的時(shí)候進(jìn)程內(nèi)存漲到 2G 以上容器直接被 kill。 原因用了XSSFWorkbook所有行和單元格對(duì)象都駐留在堆里一個(gè)單元格對(duì)象幾十字節(jié)五萬(wàn)行乘二十列就是一千萬(wàn)個(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)讓庫(kù)自己判斷如果工廠也認(rèn)不出來(lái)用十六進(jìn)制工具看一眼文件頭D0 CF 11 E0是真的 xlsPK是 xlsxhtml或者table就是偽裝的得先當(dāng)文本解析再轉(zhuǎn)。5.5 單元格樣式莫名不生效現(xiàn)象設(shè)置了邊框和背景色打開(kāi)文件發(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. 二次開(kāi)發(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; // 不歸零讀出來(lái)就是空的 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ì)先問(wèn)清三句話讀進(jìn)來(lái)的是什么格式、寫出去給誰(shuí)用、最大多少行然后才動(dòng)手寫第一行代碼。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91+欧美| 日婷婷| 99热久| 综合久久少妇中文字幕| 天天综合亚洲综合| 日韩色图 一区二区| 长长久久88视频| 三级精品三级在线观看| 国产精品一区二区三| 蜜桃精品视频一区| 97亚洲综合电影| 在线岛| 精品无码久久久久久久久果冻糖心 | 久久99精品视频| 色网在线视频观看免费| 91天天| 国产视频97| 婷婷15月天青娱乐| 欧美亚洲美少妇一区二区| 91九色精品熟女内射| 国产视频一区二区三区在线免费观看| 97超碰欧美精品| 自拍第一页| 亚州日韩97| 伊人一区二区三区| 国产精品对白内射| 欧美日韩国产中文超碰| 天天爽人人综合免费7799| 韩国手机不卡无码三级视频| 国产操逼视频在线观看| 性久久久| 国产午夜激片Av毛片不卡| 成人av福利在线观看| 久久精品| 超碰在线欧美性爱激情| 男女猛烈无遮掩视频免费软件| 色噜噜国产精品视频一区二区| 日韩av电影网站| 欧美少妇性乱| 少妇丝袜在线观看AV| 精品国产国产AV| 狠狠图片青青草| 91最新综合| 亚洲精品一二三四区| 欧美熟爽综合| 人妻超碰青青草98| 97中文综合| 欧洲性人爱视频| 亚洲激情欧美色图 | 三男一女不戴套的A片| 一区二区高清视频| 最新av网站在线观看| 国内精品a| 操逼视频色| 日本视频一区二区三区| 丁香六月啪啪| 亚洲精品人伦一区二区| 夜夜骑日日| 国产精品噜噜噜日日日| 亚洲97成人在线观看| 一区二区三区亚洲| 亚洲色吧网| 国产婷婷一区| 亚洲性高潮| 啊啊啊啊啊啊在线| 内射小黄片| 国产熟女免费观看久久| 精品 码产区一区二-1080P高清在线www-B029AV | 欧美久久婷婷| com 首页 18岁 禁区 女优 免费 精选 同城 | 天天做天天爱| 国产久久av| 操碰97| 蜜臀AV成人精品蜜臀| 国产美女口爆吞精| 91热| 国产一区二区三区免费视频在性观看 | 涩五月婷婷| 色婷婷aV一区二区三区麻豆综合 | 夜夜操青青草| 97超碰资源网| 亚洲精品一区二区精品| 久久久com| 天堂麻豆天美| 国产60页| 婷婷久久网| 国产专区路线| 人人妻人人澡人人爽人人精品浪潮| 中文字幕精品码亚洲| 岛国毛片在线观看免费| 日本三级久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 九九热在线精品视频| 9 7超碰在线免费观看| 97国产中文| 91蜜臀熟女| 亚洲无限观看| 亚洲精品尤物yw在线影院| 国产一级αv免费看片| 97中文字幕色| 成人羞羞视频国产| 97国产色综合| 色噜噜国产精品视频一区二区| www.99中文字幕| 97九色人妻| 欧美日韩小说| 丁香九月激情| 91超碰在线观看| 午夜视频久久久久一区| 国产精品色哟哟| 久久男人的天堂| 亚洲欧美精品一区天堂久久 | 91快色色色色色| 国产性刺激| 免费视频97| 久久激情视频| 欧美亚洲首页| 天堂岛av| 精品九九九九| 无码一区二区三区四区五区六区七区八区九区十区视频 | 把腿张开老子CAO烂你| 日本道不卡| 亚洲综合一区二区| 国产丝袜一区二区三区| 国产精品美女久久久久AⅤ国产馆| 九九毛片这里只有精品| 揉揉日日日日| 免费观看欧美日韩操逼视频| 九热久| 欧美在线视频99| 色区97| 九九99精品视频在线观看| 超碰97色| av影片在线观看不卡| 日韩av影片在线观看| 色大香蕉97N| 日本性爱欧美性爱| 日韩av乱伦| 91在线/欧洲| 日本熟妇人妻中出视频| 99热线麻豆| 狠狠操狠狠| 欧亚日韩中文在线| 人妻熟女一区二区| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 人妻aa| 成人久久久精品| 91在线无码精品秘 软件| 97操碰| 99精品免费| 国产在线播放成人免费| 国产麻豆一区二三区| 激情久久av一区av二区av| 高清视频一区| 九九国产热| 色综合网1| AV一起草在线| 中文操逼字幕| 日韩有码回春沙龙第一页| 97人人模人人爽人人| 中文字幕一二三| 亚欧中文字幕在线视频| 99久久国产精品免费高潮| 97青娱乐超碰久久| 婷婷久久五月天| 欧美男人天堂| 正宗无毛一线天嫩逼| 91久精品| 一区在线国产播放| 一级岛国大片| 色综合av综合久久| 蜜臀AV秘一区翔田千里| 亚洲高清少妇| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 青青草在线成人视频| 岛国1区2区3区在线观看| 玖玖草久草99蜜月一区二区三区| 日韩欧美麻豆大片| 国产精品自拍欧美在线| 免费精品中文字幕| 2024年最新色情网站在线观看| 久日91在线| 青青草操逼逼视频| 精品一区二区人妖| 高清国产性猛交xxxx乱大交| 97碰久久| 欧美日韩欧美| 亚州,欧美在线| 美女91在线观看| 国产刺激视频| 五月激情视频| 激情五月综合| 久久久久久亚洲精品不卡人乳 | 婷婷久草一区二区三区| 第一高清av中文字幕| 强上我不卡卡| 69人妻精品一区二区绯色| 国产欧美日韩一区二区三区| 成人一二| 日本精品一级二级三级| 色网站导航大全| …亚洲黄色厕厕女女在线播…| 91色射| 我想要啊 啊 啊| 97超级欧美| 搡老女人老91妇女熟女| 国产熟女| 亚洲资源网| 黄色十八禁网站| 日本精品人妻少妇一区二区| 午夜情侣自拍网站| http://qxhbdz.com| 天天综合91在线| 天天欧美色| 亚洲宅男天堂| 亚洲人精品久久久喷水| 久草精品热视| 97视频在| 久久久成人免费av电影| 婷婷激情丁香| 亚洲无码com| 人人爱人人乐人人操| 尤物网站91| 麻豆久久精品亚洲精品88| 国产深夜福利| 思思热在线视频在线| 午夜国产综合视频在线观看| 爱干爱射网啊啊啊| 久久大线蕉一区| 西西美女视频网| 97精品久久久久中文字幕| 人妻素股| 天天色欧美| 亚洲色综合| 成全动漫视频观看免费下载| 五月丁香社区婷婷日韩欧美精品影院 | 夜夜国自区| 亚洲国产97在线精品一区| 91n处女在线观看| 男人天堂东京热| 国产无吗在线播放| 在免费jIzzjIzz在线视频| 午夜免费视频1000| 91超碰在线播放| 国产精品色| 奶水 人妻 哺乳 在线| 九九九免费视频| 久思思热视频在线观看| 久jiu久神马影院| 亚洲区限制级| 清纯唯美综合| 免费观看网黄| www.婷婷| 97av,com| 亚洲欧洲日本精品中文a∨| 日韩性爱再线视频| 中美日韩毛片| 9精品久久久久| 天天谢天天干| 久久精品亚洲东京热色播| 欧美最大综合网| 国产97在线视频| 人妻人人做人人澡人人爽欧美一区| 涩五月婷婷| 婷婷另类小说| 午夜小电影在线插入淫高潮| 操比国产| 午夜福利在线合集| 亚洲自拍偷拍视频在线| 综合久久中文字幕综合日韩精品| 久久中日麻豆| 人人 操人人 操人人| 亚洲精品男人的天堂| 超碰久久草| 久久久人妻| 亚洲人妻中文高清| baiduhicn.com。| J?P?NESEHD熟女熟妇伦| 九九九九九九亚洲| 国产肏逼网站| 密臀在线免费观看| 国产精品黑人一区二区三区| 五月丁香久久| 欧美性高潮| 入口操逼网站| 天天操天天干美女网址导航| 91一起操| 国产h小视频在线观看免费| 三级片网站在线播放| 欧美性爱一区二区三区四区| 超碰在线人妻中文字幕| 蜜桃视频精品一区二区三区| 欧美人与动性人交a| 欧美熟女少妇| 99精品国产户外露出| www.91色综合| 四虎国产精品永久在线囯在线| 看日韩美女二区三区免费操逼视频 | 国产97免费视频| 熟女熟妇伦久久影院毛片一区二区| 激情天天视频| 一区二区三区蜜桃成人撸久久东京热 | 草草网站影院白丝内射| 精品少妇一区二区| 婷婷五月色| 亚洲Av诱惑| 夜夜爽33333| 欧美日韩在线小说 | 五月婷婷六月天| 色臀AV| 屌逼麻豆| se01国产在线视频| 欧美高清在线| 狠狠干综合| 97国产人人| 亚洲城人男人的天堂| 操操逼视频| 91N综合在线| 亚洲欧美日韩精品久久久一区二区 | 97久久国产精品| 少妇天堂网络| 思思热久久成人| 97网址97| 亚洲色图久久成人| 免费啪啪av| 国产热av| 97精品国产97久久久久久| 人妻加勒比东京热| 一起草三级AV电影在线观看| 一牛一区二区三区久久| 99热超碰在线| 久久黄色性爱视频| 暴力av在线| 十八禁视频一区二区| www.狠狠干.coom | 日本人妻最新在线中| 女生自91网站| 亚洲操操操| 亚洲A曰本VA欧美VA视频| 欧美青青视频| 五月婷在线| 日韩性爱1级片视频| 青青草影视蜜久久| 欧美爆操91| 成人性爱电影一区二区| 亚洲一区二区三区不卡国产欧美| 亚洲欧美电影| 91操熟女视频| 日韩少妇在线视频| 性欧美另类高清| 日韩A优精品在线观看| 91熟女网| 韩国嫰模上门援交视频| 国内操逼视频二区| 操穴国产| 婷婷综合网站| 在线v中文字幕一区二区三区| 九九九九国产| 亚洲精品国产拍免费91在线| 欧美亚洲涩涩| 欧美少妇第一页| 中文字幕在线免费观看视频| 日本操嫩b网| 另类图片欧美激情综合| 91bbb| 中文字幕AV中出| 啊啊啊不要嗯嗯在线观看| 亚洲丝袜天堂| 麻豆乱码久久精| 91大学精品激情戏| 国产亚洲99久久精品| 亚洲成人福利电影免费| 国产亚洲精品A在线观看下载| 啊v在线观看视频| 久久9精品网站| 97在线观视频免费观看| 久久精品老司| 综合 青草 伊久久 影院 综合| 五月婷在线| 国产67194| 秋霞视频一区二区 | 久久婷婷苹果| 久肏视频字幕| 国产嫩草精品A88AV| 中文字幕精品亚洲熟女| 91色欧美| 国产久久久久久| 色香欲影| 国产白丝精品在线观看| 国产1024在线播放| 久久成人国产精品| 成全在线观看免费观看| 久草视频在线视频在线视频在线观看| www.av在线视频| 国产免a费看黄片在线| 性在久久久久久| 亚洲无码免费看| 啪一啪免费视频| 色爱国产| 男女打扑克高清网站| 欧美日韩国第一区| 亚洲色图自拍| 日韩人妻无码不卡网站| 日本一区二区三区四区五区六区七区八区九区| 91免费看一区二区三区| 国产传媒午夜理伦精品| 欧美 亚洲 偷拍自拍| 97天堂| 800zy一区二区| 久久偷拍人| 欧洲亚洲人人爽爽视频| 精品久久久久综合无码| 日韩国产精品人妻无码久久久| 四虎国产精品永久入口| 亚洲午夜AV| 精品人妻一区二区三区-国产| 蜜臀亚洲中文| 伊人少妇久久久| 日韩久射综合| 精品成人动漫一区二区| 狠狠色丁香| 欧美亚洲第1页| 美女上床网站| 亚洲视频中文一区| 亚洲乱熟女一区二区三区大香蕉| 久久久久国产亚洲一区欧美色图日韩| 九九九精品一区二区无码| 伊人网在线点播| 东京热视频网| 亚洲另类久操网| 天天干夜夜肏| www.亚洲成人一区| 校园春色之综合网| 2019男人的天堂| 色欲Av人妻精品一区二| 99在线精品观看99| 久久机热| aaaa黄片| 精品成人女人久久| 国产无码高清操逼视频| 小草三级久久观看| 中文字幕av一区二区三区人妻少妇| 欧美牲| 婷婷亚洲综合| 风月影院男女十八禁| 性天堂| 婷婷丁香熟妇综合网| 亚洲色香| 91伊人久| 秋霞男人网| 97亚洲欧美| 激情综合网五月婷婷| 欧美亚州色的图| 超碰国产精品无码| 熟妇艹鸡八| 亚洲欧美日韩偷拍色图| 欧美少妇熟女| 男人的天堂va| 久久综合五月天| 天天综合站| 一牛影视成人片免费| 大香蕉在线86| 日本成熟少妇A∨网站| 久热伊人99re| 少妇久久久久久| 天堂蜜桃无码视频一区二区| 高清视频一区| 亚洲天堂,男人| 欧美在线亚洲| 熟女丰满人妻一区| 欧美一区二区三区不卡高清视频| 99国内精品| 97综合国产| 91久热这里只有精品| 午夜爽爽爽| 极品丝袜无码| 操啊国产| 亚洲天堂日本| 网页导航五月天免费一二三区| 美女丝袜激情小说| 欧美成人性爱视频大全| 揉揉揉夜夜| 夂久色| 亚洲综合影院| 国模不卡一本二本三电影| 中文字幕,人妻,日韩| 嗯嗯啊啊好疼| 久久一区二区三区入口| 久操国产在线| 顶级少妇BT天堂| 成人性爱AV在线免费观看| 欧美色图 人妻| 中文字幕aⅴ在线视频| 天天躁夜夜躁狠狠躁AV| 六月丁香五月婷婷| 国产亚洲深夜激情| 久久6热精品99视频| www欧美性爱| 国产精品夜夜| 天天天天天天天天综合| 伊人久久大香大香线蕉中文| 99re视频这里只有精品| 亚洲精品一二三四区| 久久黄色性爱视频| 欧美天堂在线| 很很很很操| www.狠狠操| 超碰导航97| 老熟女91视频| www.99热| 囯戸精品高潮呻吟旡码| 蜜桃丰满熟妇av无码区不卡| 激情五月综合| 色色色色日本| 97爱亚洲| 国产精品在线一区二区| 欧美日不卡| 思思热久久成人| 久久精品熟妇丰满人妻99| 99只有精品| 婷婷香蕉欧美在线一区二区三区| 亚洲国产一区二区入口| 丰满人妻-区二区三区| 日韩少妇无吗| 97超碰美国| 黑人无码一区二区| 大屁股人妻女教师撅着屁股| 久久久国产护士丝袜美腿一| 天天做天天爱天天爽AV| 91粉芽高清在线一区二区| 国产宅男宅女在线观看| www熟女乱伦com| 婷婷性网| 久久精品综合| h色99999| 啊啊啊啊二区好大| 顶级少妇BT天堂| 99视频在线| 日美免费黄片| 国产中文精品一区二区在线观看| 亚洲av噜噜噜噜噜噜| 99操逼| 亚洲精品人伦一区二区| 欧美亚洲日韩16色| 免费久久9999| 欧美后入视频| 亚洲欧美国产va在线| 超碰97男人| 一二三啪啪专区| 又大又白奶子| 日本欧美韩国日产片片在线看免| 九九色精品| 一区二区娱乐网站| 韩国一级婬片A片AAAAA| 国产第25页在线观看| 欧美自拍偷拍综合图片| 欧美18老人禁| 99久久久久久亚洲精品不卡| 超碰免费人妻人人| 99re9在线| 99操| 日韩精品一区二区三区四虎影视| 丁香激情五月天| 久/久精品99看9| 99亚洲天堂| 六九九九| 麻豆av一区二区三区| 国产suv精品一区二区四| www.狠狠干.coom | 超碰九7| 欧美色视| 成人无码在线视频网站| 色黄色美女大长腿午夜视频| 乳欲人妻办公室奶水| 国产AV激情无码久久无码| 综合操逼| 天天日天天插| 欧美少妇第一页| 一本久久精品中文字| 97伦乱| 欧美色图第一页| 搡老熟女免费视频| 51一区二区三区| 五月丁香综合啪啪| 精爱久久| 性色高清..……| 92一区二区| 精品成人无码| 欧美一级色| 欧美一区二区日韩传媒搭讪精品| 97一区二区三区视频| 男人天堂最新手机版在线青青草| 熟妇一区二区| 岛国色情视频在线观看| 色婷五月| 久草综合视频| 天天干嫩逼网| 97精品熟女少妇一区| 日韩成人精品中文字幕| 亚洲影院小综合| 免费国产| 亚洲国产精品V?在线播放| 国产一区二区三区导航| 在线啊啊啊啊| 人人澡人人澡人人| 五十路六十路素人熟女| 骚逼高潮久久精品| 色五月激情AV在线| 国产91影院| a在线视频免费观看| 图色综合网| 九九九九热只有精品| Sekablack无码一区| 日本3级一区二区免费| 殴美日韩m| 亚洲少妇综合| 精品国产丝袜一区二区三区乱码| 欧美九九爱| 亚洲天堂久久| 欧美熟女操屄| 亚洲91网站| 你懂的在线观看区国产| 人妻激情偷乱视频一区二区三区 | 青青久久艹| 人人摸人人添人人操| 国产夜夜操| 躁躁躁日日躁2020| 婷婷五月天影院| 超碰到97情色| 日韩久久.一级黄色片| 综合日韩激情另类图片| 9久久久久| 日本久久精品| 蜜臀中文无码午夜| 欧美劲爆视频一区二区| 东北操逼| a级成人毛片免费视频高清| 亚洲区限制级| 亚洲自拍天堂| 足交视频老司机| 波多野结衣被操50分钟免费视频| 一区二区三区四区五区高清无码永久视频 | 精品网站99999| 国内毛片国产欧美拍| 6080yy午夜理论三级一区二区三区无码| 天欧美在线| 人人摸人人摸人人干| 精品无码人妻一区二区免费蜜桃| 综合影院永久入口国产| 麻豆国产原创AV色哟哟| 麻豆国产97在线| 大香蕉综合| 精品亚洲一区在线观看| 91网站18在线| 国产啊v在线免费播放| 天天日天天操VV| 日韩精品人妻一| 乱码人妻一区二区三区| 99久久e免费热视| 热的中文 热的有码 热的国产| 黄片免费看的| 91热色| 99热在线播放| 久久狠狠色噜噜狠狠狠狠97| 欧美激情亚洲色图| 亚洲国产欧美一区二区潘金莲| 亚洲和欧美裸体美女双飞视频| 丰满人妻一区二区三区四区| 啊啊啊操死我了| 青青草日韩无码| 操b在线观看| 校园春色中文字幕AV| 日韩AV熟女乱伦| 欧美色图亚洲色| 国产亚卅97| 日韩av不卡在线观看| 国产sv美女内射| 夜夜高潮夜夜爽高清视频一| 亚洲日韩精品一区视频在线| 亚洲国产97在线精品一区| 97精品国产97久久久| 国产在线视频二区| 亚洲丨在线| 2025亚洲男人天堂| 国产92麻豆天美精品色欲5| 国产精品久久泡妞网站| 国产偷仑| 人妻熟女午夜精品在线| 99久久精品无码一区二区毛片免费 | 99re69综合| 日韩一级片在线看| 亚洲最新Av| 男人的天堂kva| 德国一二三不卡| 亚洲欧洲国产综合av| 淫荡网址| 久久久久久中文| n1038 一二三区| 超碰91在线| 亚洲春色欧美激情自拍| 果冻传媒A片麻豆熟妇人妻| 美女AV一区二区| 日韩人妻大香蕉| 可以免费观看的日韩av毛片| 欧美中出| 亚洲女人91| 东北操逼| 夜草欧美| 天堂麻豆天美| 精品久久一区二区三区四区五区| 91c色| 一区二区三区美女超清| 91n处女在线观看| 91路www| 一区二区 日韩 欧美 国产 传媒| 久热超碰| 亚洲欧美日韩夜夜| 国产一级作爱毛片| 啪啪啪东京| 日韩三级伦理中文字幕| 亚洲欧美伦综合| avav青青草久久夜| 嗯嗯啊啊啊啊轻点视频| 中文字幕综合人妻| 国产偷仑| 中文97国产| 日本不卡五区| 亚洲中文字幕av | 看免费一级在线播放毛片| 狠狠躁伊人中文字幕| 亚州Av天美传媒| 人妻黑丝袜电影| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 艳美熟妇先锋一二三区| 精品久久一区二区三区四区五区| 丁香六月综合激情| 久久婷五月天| 久操大香蕉手机视频在线看| 婷婷五月天成人| 99精彩视频| 大奶啊啊好爽| 1区2区3区在线视频| 国产人妻精品久久久一区二区三区 | 99热这里都是精品| 涩涩五月天| 久久人妻丝袜一区二区三| 日韩啪啪啪啪啪| 久久久久日本视| 69综合网| 欧洲精品一二三在线| 亚洲青青草| 97欧美日韩精品| 精品九区| 桃花色综合影院| 最新国内自拍av免费| 日韩在线性爱免费视频| 国产精品自在线发布| av国产无码| 久久午夜伦| 大香蕉天天看妹子| 啊啊啊久久久视频| 熟女91网站| 少妇一级无码精品| 91人妻素女| 992这里有精品| 超碰97网址| 呻吟 欧美 日本 中出| a啊啊啊啊啊啊啊啊一区二区| 久热热| 久久久久久久伊人精品| 国产精品无码AV网站| 五月天开心网| 97超碰资源网| 91第一页| 国产精品999zyz| 大香蕉伊人久久| 爽爽爽免费视频| 熟女高潮精品一区二区| 亚洲伊人成综合成人网| 美女一区二区国产精品| 婷婷久草一区二区三区| 搞中出视频在线观看| 国产丁香精品露脸视频| 一区二区三区美女超清| 最新日产中文在线麻豆| 啊啊啊啊啊在线观看网址| 国产第二页| 综合网91| 日本护士高潮| 精品视频97| 999热这里只有精品| 俄罗斯一区二区视频在线观看 | 国产欧美另类久久久精品课程| 手机午夜电影神马久久| 久久久婷| 啊啊啊啊啊舒服| 操一操摸一摸| 制服乱伦| 99re6国产精品99re| 日本韩高清无砖码22o| 婷婷五月天激情网| 美女啪欧美一区| 91亚洲情色| 操比国产| 99精品高潮| 13小男生GAY自慰脱裤子| 五月丁香啪啪| 久久久性少妇| 国产白嫩漂亮KTV在线| 久操B网| 91欧美经典| 性爱av网站| 97网址97| 国产精品999zyz| 久操 高清| 国产午夜精品理论片a大结局| AV中文在线| 亚洲天堂一二| 手机在线看片免费人成视频| 夜夜嗨绯色| ,成人免费啪啪视频| 国产超碰国产97| 96精品久久| 婷婷色色五月天| 安微少妇操BBB| 国产小u女在线观看| 亚洲性感丝袜诱惑在线观看| 大香蕉www.超碰| 伊人青青草久久| 日韩中文字幕视频| 美女裸体麻豆天美蜜桃91| 九九九热| 91女在线观看| 午夜啪| 神马午夜久久久| 9国产超碰| 操逼精品视频| 国产啊v在线免费播放| 91久久久老司机| 在线视频免费播放一区| 久热大香蕉网站| 日韩欧美俄罗斯A片| AV色五月| 丁香五月天堂网| 啊啊啊操死我| AV高清一区| www.av在线视频| 亚洲男人天堂2| 久久99网站| 国产老太乱伦一区| 国产久久日韩网站导航| 成人麻豆av电影网站| 成人精品视频| 亚洲欧美日韩综合在线尤物| 亚洲色人阁| 夜夜操av亚洲一区二区| 操迟操逼在巾线Fre看| 亚洲清纯唯美| 99色在线| 亚洲春色欧美激情自拍| 久久亚洲色图中文字幕| 亚洲日本韩国在线| 亚洲毛片基地专区| 97干天天| 我爱大香蕉| 肉动漫无遮挡h在线观看| 丁香婷婷激情五月天无毒不卡 | 欧美一级三级| 色综合V| 亚洲亚洲亚洲天堂天堂 | yiqicaoav| 中国熟女91| 97资源制服丝袜| 韩日性爱av| 青青青在线高清视频在线一二三四区| 欧美黑人猛交春色影视大全| 成人一级性爱| 亚洲中文字幕一区二区| 亚洲熟妇熟在线电影视频| 日本在线不卡v二区| 超碰九7| 精品中文日韩字幕视频| 亚洲综合激情五月久久| 99久久久无码精品国产人| 校园春色 亚洲| 屌妞视频久久久久久久| 婷婷综合久久| 乱伦一区二区三区‘| 97这里有精品| 色偷综合| 蜜色网色哟哟| 精品超碰国产| 中文字幕AV乱伦| 78操B| 91美女国产在线| 97内射偷拍| 九九亚洲| 在线观看日韩av不卡| 涩综合导航| 女生91网站| 亚洲极品| 97精品国产精品免费观看| 国产人妻精品久久久一区二区三区| 午夜偷拍久久熟女| 亚洲成人在线高清| 蜜桃av色偷偷av老熟女| 3级毛片一二| 99re在线精品78| 99re69综合| 日本天天吊| 婷婷综合| 亚洲精品久久久久久久蜜桃臀| 国产AV色黄看到爽| 成年人黄色视频免费| 色逼综合| 欧美熟妇精品黑人巨大91| 91老熟女91老女人| 是还免费视频1727我| 日本999精品视频| 女同亚洲欧美一二三区久久电影| 亚洲综合婷婷| 91人人臊| 久久精品国产免费观看99| 日韩激情毛片一级久久久| 亚洲欧美综合| 久久久久少妇| 天美传媒婬乱在| 91熟女网| 久久久久白虎| 美女好片色日本| 日韩无码第3页| a啊啊啊啊啊啊啊啊一区二区| 一区二区三区在线日韩影院观看| 亚洲综合一| 制服丝袜第二页| 美女让帅哥通她小鸡鸡| 亚洲国产中文字幕| 怡红院亚洲怡春院av| 蜜桃臀一区二区三区久久| 国产精彩女在线观看视频| 久久人妻少妇| 亚洲骚男同com| 国产精品白丝AV| 一区二区视频在看| 火箭成精品视频884必出精品| 欧美性91| 26uuu最新| 91东京热男人的天堂| 欧美探花网| 你想操日本小逼吗| 91成人精品在线播放| 久久婷婷综合国际产色怕| 777奇米影视777四色| 久99热| 超碰调教97| 在线视频一区二区传媒| 久操在97| 久久久免费高清中文视频| 亚洲黄色电影| 日韩啊V| 国产操操日韩三级黄| 九月丁香综合网| 五月婷婷性爱| 91色五月俺来也| 日韩精品电影| 9 1果冻精品视频| A 天堂| 亚洲天堂7777| 亚洲熟妇极品| 色欲人妻一区二区在线| 久久久精品一区二区| 精品夜夜澡人妻无码AV| 污色区网站| 国产极品美女高潮无套在线观看| 在线观看精品国产免费| 97电影院超碰| 欧美日韩亚洲高清不卡一区二区三区| 日本高清熟女久久一区| 加勒比aⅴ| 日本人妻中文字幕精品| 无遮挡猛进视频免费无限观看| 天天综合色电影| 超碰天天操| 91亚洲人| 九月丁香综合网| 美女露胸露屁股| 天天干1区2区在线| 人人操人人色网| 操逼逼福利视频| 色一射色一射| 女上位精品在线| 人人操人人插 - 百度 - 百度| 8050午夜少妇无码| 九九热免费在线国产视频伊人五月| 国产人妻精品一区二区三区秋霞 | 夜夜影视四色| 亚洲AV乱码专区国产噜噜亚洲| 久久成人午夜狠狠| 国产强奸乱伦无码视频| 深田咏美亚洲精品福利社| 午夜天堂网| 亚洲毛片久久| 伊人影院综合是一个与深夜成人在线 | 粉嫩AV一区夜夜嗨| 日日爱99| 超碰在线看| 亚洲91综合| 国产美女销魂在线观看不卡| 夜色五月天| 久久久久久99999国产精品| 秋霞一级A片黄色视频| 成人 日韩欧美一区| 天天热精品| 国产特级毛片AAAAAA高潮流水| 久久久青青草| 国产97视频免费观看| 亚洲欧洲无码97久久精品| 91另类| 久久国产视频性吧 | 精品亚洲国产成人av网站| 欧美综合色站| 中文字幕后石码三区四区| av中文在线| 天天久久久久久| 久久97| 国产一二三福利视频网| 91狼人| 日日玩天天干| 亚洲图片欧洲图片aⅴ| 超碰天天操| 中文字幕精品一区欧美| 欧美性暴力猛交XXXX| 91中出| 91N五十路| aa片毛片| 天操天操夜操夜月操月年年操| 97超碰色色| 中文字幕二区日韩天堂| 欧美日韩传媒| 亚洲天堂另类美腿| av黄图片在线观看| 美日韩一卡二卡三卡免费人妻精品| 美女啊啊啊啊啊| 乱人伦 国语对白:视频直接看| 亚洲综合在线91| 国产精品一二三区福利| 97AV在线观看| 蜜臀亚洲中文| 欧亚性爱在线视频| 91少妇通奸网站| 欧美 亚洲 偷拍自拍| 亚洲色图欧美色18直播在线| 91碰碰碰| 香蕉欧美| 欧美成人色| 国产精品无码论坛| 老熟乱一区二区三区四区| 99精品在线播放| 精品午夜福利导航| 你草精品在线视频| 韩国黄片aaaa| 青青草综合在线| 黄色大片一区二区密桃丝袜| 欧洲黄色网| 精品久久艹| 久久丁香| 国产精品久久久久久高清无码免费看| 97精品视频网站| av天堂5| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 丁香五六月啪啪| 插入粉嫩少妇视频| 日日干日日| 亚洲一区在线观看欧洲| 91超碰碰在线| 在线 制服丝袜中出 人妻| 中英熟女操女| 福利大香蕉| 欧美|91色综合| 久操网视频| 日本久久超碰| 亚洲男人的天堂网| 成人欧美一区二区三区黑人一| 人人操人人干xxx| 欧亚日本情色| 色91综合网| 亚洲天堂热| 一个国产在线综合网站| 少妇贴图| 神马久久69| 无码又爽又硬又激情免费视频| 欧美精品23| 欧美性夜| 青青草玖玖爱| 伊人青青一区成人视频在线观看区| 伦伦成年午夜免费视频| 在线97视频| 大香交| 亚洲男人的天堂AV| 午夜天堂精品久久久久91| 欧美成人四级在线播放| 精品视频一二三中文| 狠狠爱AV| 亚洲欧美日韩有码| 婷婷综合五月天| 午夜精品五区| 综合影院永久入口国产| 91n处女在线观看| 中文字幕视频免费| 久久久久久久久久久久久久久乱码| 色爱综合网| 黄片aaaaa一区| 成人免费毛片| 夜色91| 黑人精品欧美一区二区蜜桃| www.AV有限公司一区| 久热久一区二区三区| 亚洲人妻av| 综合欧美日本三级| 日本一级婬片试看三分钟| 性夜影院爽黄A爽免费动漫| 亚洲人妻色图| 热热色AV| 老女人91| 久久精品99久久久久久| 久久亚洲天天做| 中文字幕精品丝袜| 天天综合网国产| www.夜夜| 五月婷婷丁香六月| 色五月大香蕉| 91久久久久久久| 日本久久精品| 五月丁香婷婷色| 色五月首页| 久久久婷婷| 久久草大香蕉| 337p大胆噜噜噜噜噜91Av| 人看人人摸人人操| 中国一区二区亚洲人妻| 日日操丁香五月天| 加勒比久久综合网高清| 无码操逼网| 日韩丰满熟妇| 一级啊性爱在线视频| 亚洲成A∨人影院在线欢看| AV污污污污| 久久99午夜精品一区人妻| 成人免费福利在线观看| 日韩一级特黄av毛片| 亚洲av影音先锋| 亚洲强奸乱伦影视网| 在线观看av区| 久久久久国产无av| 九九AV| 久久久工口| 青青操在线亚洲视频观看欧美在线 | 国产久久久久久| 在线a亚洲视频播放在线| 人人看黄色视频|