日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满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 開發(fā)者這份資料圍繞 NPOI 庫(kù)給出可直接參考的讀寫示例覆蓋舊版 .xls 與新版 .xlsx 兩種格式既適合剛接觸 NPOI 的新手入門也適合需要封裝通用工具類的中級(jí)開發(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)景我見過(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 三套模型怎么分工打開 NPOI 的命名空間會(huì)看到一堆HSSF開頭的類第一反應(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 開始跳著創(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能被正常打開、金額那一列右對(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ì)以肉眼可見的速度膨脹——見過(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)出的文件打不開提示“發(fā)現(xiàn)不可讀取的內(nèi)容”現(xiàn)象瀏覽器下載下來(lái)的 xlsxExcel 打開報(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è)置了邊框和背景色打開文件發(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; // 不歸零讀出來(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
返回資訊列表
免费1级a做爰片观看| 欧美精品99久久久**| 五十路三区在线| 最新av中文字幕高清| 免费黄色片。| 天天干天天干天天干| 天天操女人| av优播| 5252色欧美在线| 99蜜桃臀亚洲成人在线观看| 天天澡天天狠天天天做| 美女刺激久久国产欧美| 日韩欧视频| 久久久久久精品免费看A级| 日本有码久久| 亚洲乱码精品一区二区| 日韩人妻网站| 日韩中文字幕人妻视频| 日本黄色XXX| 国产路线专区| 久久香蕉网| 91久久国产综合精品| 91中出| 欧美熟妇视频| 日韩一级二级三级在线不卡观看完整| 日本色婷婷| 男人的天堂日本东京热| Sekablack无码一区| 91狠狠综合久久| 久久久噜噜噜久久人妻| 日本黄色裸日本黄色裸体| 亚洲色人| 东北老女人的激情视频| 日本操大逼| 日本久久综合| 欧美亚洲另类在线蜜桃| 四虎影视欧美| 黄总AV色图| 久久九色| 日夜啪电影| 日本www操操操| 伊人欧美大香蕉视频| 久久久久久久少妇| 色欲蜜臀AV| 九九热精品视频六| 亚洲视频二区 | 老鸭窝成人免费毛片视频| 另类综合另类| 亚欧高清在线| 九九精品无码专区免费| 婷婷五月天色网| 六九九九| 国产欧美岛国精品一区| 中文字幕在线免费观看| 日han少妇无码| 黄色乱论网站| 夜夜爽77777| 99久久久久久久久| 99久久婷婷丁香| 国产黄色剧情影片麻豆免费播放| 亚洲欧美自拍偷拍| 在线观看高清AV| 另类亚洲一区二区三区| 久久精品 六十路 熟女 欧美| 四虎在线视频| 久久黄黄黄| 日韩综合97P| 丁香婷婷激情五月天无毒不卡 | 三级精品三级在线观看| 亚洲国产97| 亚洲成a人在线观看久| 日韩成人性爱AV| 本道综合精品| 青青操在线亚洲视频观看欧美在线 | 亚洲男人的天堂一区二区| 国产美女裸体秘 永久无遮挡| 岛国黄片网站| 国产精品爱欲| 国产麻豆一级精品视频| 久久激情综合| 快点操死我| 综合久欧洲| 91色噜噜狠狠| 9999九九九久久久| 欧美乱妇狂野欧美在线视频| 亚洲色图 图片| 亚州中文字幕超碰97| 亚洲在钱| 第一高清av中文字幕| 波多野42部无码喷潮在线观看| 超碰色综合| 奇米四色网| 国产99久久99热这里只有精品15 | 无码人妻精品一区二区中文 | 国产女同性恋视频| 欧洲一区二区| 日韩熟女操逼| 欧美日韩国产中文超碰| 国产乱码精品久久久久久| 亚洲青青草| JuliaAnnXXX888| 1000部熟女视频在线观看| 亚洲国产精品9999在线观看| 精品人人| 五月天综合在线| 97AV爱| av东京热男人的天堂| 东京太热男人的天堂久久久| 全免费a敌肛交毛片免费| 蜜臀AV成人精品蜜臀AV久久| 极品销魂美女一区二区 | 三级网色| 97看操| 偷拍 亚洲 欧美| 99热99色| 大香蕉2017| www.99中文字幕| 久久免费看高潮毛片韩国| 97K超碰在线| 亚洲成人色情五月天丁香花| 女性喷水高潮在线观看| 日韩内射视频| 日本人妻中文字幕| 久久超碰大香蕉| 国产精品盗摄 偷窥盗摄| 熟妇视频一区二区三区在线观看| 偷拍 欧美 日韩| 色妹子A V| 日韩精品午夜操呦呦不卡影院| 韩日无码在线观看| 97色欧洲| 精品无吗久久| 中文字幕一区二区韩| 亚洲drav色图| 大地资源在线观看中文第二页| 日本狂喷奶水在线播放212| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 日韩人妻制服丝袜av| 曰韩少妇无码| 激情视频网址| 大屁股人妻女教师撅着屁股| 中文字幕免费看| 黑丝少妇| 亚洲成人久久美女| 天天做天天爱夜夜爽毛片试看| 久久鲁夜| 亚洲中文字幕av| 欧美一区二区| 国产黄色动态精品| 国产精品久久久久无码AV会牛| 国产一区二区精品在线视频| 中文字幕乱妇免费视频| 97人人模人人爽人人| 91中出视频| 婷婷久久综合久| 国产三级中文字幕粉嫩| 久操高青| 人人操av| 两性色网| 一本一道vs波多野结衣| 欧美性爱1080p| 伊人网高清| 校园春色综合色| 天天爽天天| 久久国内| 国产女生在线| 欧美一区二区三区另类精品| 无码外流操逼视频| 国产av激情无码久久天堂| 91爱啪| 婷婷10月天青娱乐| 色亚洲欧美| 综合情欲网| 久插不卡| 亚热日本熟女| 欧美色图成人网一区二区| 久久国产精品91| 婷婷伊人网| 九九色色| 不卡人妻少妇精品毛片一区23区视频| 亚州成人A√| 99国产天美| 99久久这里只有精品| renqi久久久久久久久久久久| 五十路三级片| 在线观看黄色电话| 久草五月| 校园春色之综合网| 75大香蕉| 欧洲自拍第一页| 久久一本大香蕉 | 免费亚洲国产精品久久一区| 91最新综合| h无码动漫在线观看| 成人羞羞视频国产| 青青草在线视频播放器| av网站免费线看| 99热成人| 天天爽夜夜欢视| 男人久久精品| 淫淫综合网| 夜夜操美女| 国产CHASE男男GAYGA 毛多色婷婷| 黄色高清无码无码破解免费暗网| 色婷婷蜜臀av| 中文字幕1区2区| 乱伦一二三区| 亚洲无码99| 人人操天天爽| 91爱啪| 精品久久无码午夜福利| 日本一本道A级黄色毛片试看60分钟| 深田咏美亚洲精品福利社| 黑丝少妇麻豆| 婷婷五月天激情四射| 亚洲欧洲综合成人av一区| 夜嗨影院| 亚洲欧美色综合| 青青草原香蕉日本Ap| 操逼日批| 蜜色网色哟哟| 欧美激情在线观看视频| 日日干天天干夜夜爽| 操逼逼中文字幕| 亚洲精品影视老司机| 精品射1999| 97超碰美女| 无码直播久久久| 操九九九九九九| 国产精品乱码久久久| 男人天堂黄片| 嗯嗯啊啊好疼| 熟女乱3伦999| 麻豆 欧美 日韩| 久久久久久久久久久久久久久久9| 91白嫩| 欧美性爱中文字幕无线码| 国产精品成人蜜臀AV在线| 殴美日韩m| 国产呦精品系列在线观看| 日本日逼视频网| wwe 天天干.com| 欧美一二三级精品在线| 人妻精品综合中文字幕在线| 久久伊人最新网址视频| 中文字幕十五区| 国产农村一一级特黄毛片| 97超碰美女| 精品久久久久黄少妇| 熟妇女伦乱视频| 日韩 成人 有码| 亚洲国产一区二区入口| 91白虎| 情侣开房子拍 日韩无码 女的很漂亮| 操逼免费视频无码国产| 91网站18+| 日本福利社| 飘花国产午夜精品不卡| 搡老女人老91二区| 国产日韩中文字幕欧美| sss视频华人在线| 人人插人人搞人人操| 尹人免费观看视频在线| 啪啪啪男女亚洲中文字幕99| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 日本幼女18+| 91性感网站| 国产av尤物| 麻豆久久精品亚洲精品88| 亚洲图片欧美制度| 亚洲国产日韩欧美熟妇在线| TS人妖另类精品视频系列| 你草精品在线视频| 欧美少妇性爱网站| 亚洲AV无码AV吞精久久久久| 伊人精品久久网站| 91人妻最真实刺激绿帽| 狠狠色伊人亚洲综合网站色| 日韩欧美女求操每天更新| 国产天天噜一噜久久久| 91路www| 操九九九九九九| 农村妇女精品一区二区| 亚洲情色 自拍| 男女一进一出视频久久| 99精品伊人| 色婷五月天| 国产黄片精品在线| 无码最新| 国产精品91ai| 欧美夜夜狠| 日韩操p| 久久久无码视频| 亚洲国产青青| 成人资源中文字幕在线观看天天| 99精品欧美一区二区三区桃色| 亚洲图片欧美偷拍| 国产乱子伦一区二区三区免看| 男人天堂2019亚洲| 狠狠久久四虎| 天天综合日韩网| 思思热在线观看| 中文激情网| 大香蕉免费乱伦视频| 成人26uuu| 92性色国产午夜福利在线661| 色色九区| 国产久久久久久| 亚欧洲日韩国产精品| 91欧洲入口| 97热视频在线观看| 亚洲狠狠入| 国产熟女自拍| 四季av一区二区凹凸精品小说| 九九九九九九视频| 国产欧美美女免费观看视频| 偷拍欧美综合| 99.色网| 女一区二区| 91丝袜美腿网站| 欧美日韩夜夜| 91麻豆天美国产| 欧美 亚洲 大香| 夜夜操91744565| 99操逼| 午夜免费视频1000| 超碰午夜在线| 青草园大香蕉| 97国产精品在线观看| 亚洲日韩97| 精品国产乱码久久久| 男女啊啊啊啊啊| 97chaopengongkai| 午夜福利一区二区影院| 波多野结衣先锋影音| 日韩激情中文字幕有码| 激情五月婷婷| JULIA人妻风俗店中出电影| 丝袜综合| 91综合无码| 91人妻在线视频| 久久中文字幕在线观看| 精品国产乱码久久久久久久久久毛片| 91黑丝在线| 日婷婷| 人人玩人人添人人澡免费| 最新日本中文字幕| 国产精品永久免费10000| 欧美丝袜制服久久| 国产刺激视频| 欧美后入视频| 久久9精品| 老熟女搡BBBB搡BBBB视频| 亚洲国产精品成人综合| 曰韩精品视频一区二区| 婷婷97| 色欲人妻一区二区在线| 色九九综合| 欧美性爱97超碰| 少妇人妻激情四射| 国产色图乱伦| 操逼操操操91| WWW.加勒比人妻一区不卡.com| 中文子幕一二三| 一本大道青青| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 91麻豆天美国产欧美高潮| 精品国产乱码久久久久久网站入口| 欧亚无码视频| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 国产91 丝袜在线播放00-百度| 久久伊人最新网址视频| 国产激情av女片自拍| 亚洲欧洲小说图片视频| 久久9久久| 99re公开精品免费视频| 91黑丝少妇| 91情色在线| 国产区91柔拿会所技师| 99啪啪| 熟妇人妻丰满久久久久久久无码 | 东北女人操比视频| 极品销魂美女一区二区| 这里有精品| 欧美综合狠| 日本成人A片网站| 日韩人妻大香蕉| 九九九九97| 精品日韩人妻视频| 91丝袜美女| 久久高潮妇女视频| 日本三级黄页| 国产成人五月天丁香花| 91久久久久久| 久久婷婷苹果| 97香蕉碰碰人妻国产欧美| 日韩熟女精品无码专区一区二区| 精品国产乱码久久久久久蜜臀| 久久鲁干| 96久久久精品| 老熟妇一区二区三区…| 800zy一区二区| 91精片| 人人人人人人少妇| 91天天| 久久久一级| 中文字幕一二三| 亚洲天堂男人在线| 天天日天天操天天射河南省| 国产精品久久发布| 欧美岛国精品在线观看| 97综合在线观看| 色香av| 久久日韩毛| 色牛aV| oumeisetupian| 精品国产Av无码久久久亚洲| 麻豆精品久久久久久久| 91精品91久久久久77777| 久久久精品视频免费观看| 免费97视频| 在线观看日韩av不卡| 国产诱惑| www.天天干| 狠狠操狠狠操操| 麻豆乱码久久精| 正在播放国产精品一区| 亚洲九九视频在线观看| 六十路日本| 91欧美经典| 男女打扑克高清网站| 国语对白露脸XXXXXX| 97内射偷拍| 国产精品熟女九色九色蜜臀| 欧美一区二区三区黄色影视| 国产成人久久久精品免费AV| 久久精品店| 色婷婷蜜臀av| 在线国产一区二区av| 国产sv美女内射| 欧美日韩222| 色狠狠 - 百度| 欧美最大综合网| 五月丁香综合激情| 呦呦一区| 97操综合| 大香蕉伊人网WWWn0n| 中文字幕精品一区欧美| 99热这里只有精品1| 色穴精品| 高清国产性猛交xxxx乱大交| 男人综合网| 精品国产72| 最新啪啪视频| 精品国产乱码久久久久久久久久毛片| 国产九月婷婷| 粉嫩av在线一区二区| 91美女在线| 白丝少妇一区二区| 婷婷亚洲中文字幕在线| 26uuu国产成人综合| 1240青青草一区二区三区视频天爱| 亚洲丝袜B诱惑| 三级激情网站| 久久99干一本高清| 九热大香蕉| 五月丁香久久| 乱伦av.com| 精品无码秘 人妻一区二区| 1024午夜激情男人的天堂| 一区二区 韩日AV| 亚洲色色探花| 国产高清亚洲日韩一区 | 丝袜美腿91| 91男女啊啊啊| 中文字幕在线观看视频www| 亚洲图片日本AⅤ欧美在线| 午夜九九九九九九| 老鸭窝成人| 美美91成人国产精品欧美精品久久久久久久| 伊人99热| 日韩AV一起草| 美国aaaaa一级黄片| 亚洲日韩在线a不卡99精品| 欧美熟妇色| 久久一二三四五六七八九区区| 色婷五月天| 亚洲高清无码AAA久久久精品| 亚洲AV无码乱码| aa片毛片| 亚洲色人| 国产强奸乱伦无码视频| 日本综合色图| 欧美色图电影| 综合亚洲欧美| 色欧美亚洲| 欧美亚州综合网图片| 亚洲,欧美,综合网| 大香蕉在线免| A啊啊在线观看| 精品国产污一区二区三区| 亚洲情色91| 日韩精品99999| 五月丁香啪| 草草影院最新网址| 亚洲 小说 欧美 激情 另类| 亚洲中文字幕熟女| 亚洲国产精品成人综合| 日韩AV无码网站| 91久久免费视频互動交流 | 欧美97日韩| 色婷婷成人综合| 物尤视频一区二区| 青青色综合| 亚洲情色在线| 国产热av| 啊啊啊好大好深| 亚洲天天操| a级免费在线观看| 亚洲中文字幕熟女| 国产精品欧美在线观看 | 久久久久无码| 午夜久久一区二区无码中出| 91视频成人福利网站在线一区| 中文字幕乱码人妻一区二区三区,99精品 | 久久亚洲人妻| 色色综合97| 亚洲色综网| 超碰97日韩| 久久专区| 99精品视频在线观看免费| 久久精视频美日韩在线视频| 啪啪91| 五月天婷婷综合| 人妻日日夜夜精品 | 九九久久精品| 97爱欧美| 黄站在线免费观看| 午夜精品久久99蜜桃的功能章节| 欧美福利视频啊啊啊啊| 日韩久久.一级黄色片| 人人看人人摸人人色| 五月香婷婷| 精彩国产视频播放1区2区| 欧美一区二区三区黄色影视| 久久久91| 尤物黄色在线观看网站| 色播五月丁香| 天天天天做夜夜夜夜做| 久久久啊啊啊| 岛国网址国产| 国产欧美美女免费观看视频| 性交一区二区在线播放| 69一区二区三区| 欧美人妻精品一区二区| 天天操女人| 韩国毛片一区二区三区| 亚春色色| 日本性爰一道本| 日韩亚洲Av人人夜夜澡人人爽| 亚洲熟妇自偷自拍另欧美| 丝袜美女诱惑 91 视频| 欧美综合自拍| 日韩人妻一区二区精品| 330Dv国产女人终合视频极品人与兽 | 国产精品国产精品国产| 欧美日韩精品一区二区三区高清| 凹凸视频在线一区二区| 色爱三区| #NAME?| 欧美在线播放| 色色色热| 一本色道久久综合狠狠操| 成人性爱AV在线免费观看| 国人欧美精品一区二区| 国产原创精品| 天天综合网在线观看| 在线综合色| 天天舔九色婷婷| 亚洲啪啪综合?v一区综合精品区| 欧美视频在线视频免费va| 欧美aⅴ99久久黑人专区| 天天噜| 色99视频| 久久久天堂| 夜嗨影院| 亚洲极品| 日韩在线性爱免费视频| 五月婷婷性爱| 国产乱码精品久久久久久| 十八禁啪啪视频| 在线另类| 欧美成人贴图| 亚欧高清v| 日韩免费a级毛片无码a∨| 欧美日韩222| 丁香五月婷婷啪啪| 岛国色情视频在线观看| 天天做天天爱天天爽AV| 啊啊啊啊啊啊啊国| 亚洲天天影视色综合| 岛国片在线播放| 丁香激情五月| 午夜一区| 日本一区三级韩国| 亚洲爽图| 免费看污网站| 色香AV| 91干熟女| 日韩性色| 国产精品九9| 婷婷四五区| 五月激情在线| 91 亚洲 欧洲| 人人喜人人妻| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 91大胆欧美| 熟妇人妻一区二区三在线 | 美女操逼A A| 国产13区| 亚洲囯产精品女人久久久| 亚洲999综合| 久久精品三级影视| 亚洲自拍97| 不卡九肏| 日本乱人伦片中文三区| 无码男人天堂| 日韩av在线免费网站| 91黄射| 日本中文字幕在线电影| 九九九九九精品十六| 人人考人人摸人人干| 97综合激情| 日日日啊啊啊| 91久久国外网| 丁香激情五月天| 天天射天天操天天干天天吃2018 | 欧美性爱日韩高清| 97国产综合欧美| 久久国产视频性吧| 樱花蜜乳av| 久久精品视频28| 人人扣人人操| 另类图片欧美激情综合| 成人开心网在线视频| 日韩AV电影网站| 成年人三级黄色片视频| 91观看 国产白丝| 色哟哟-国产专区| 亚洲精品三区在线观看| 一本色道久久综合精品婷婷| 亚洲宗合电影| 亚洲天堂99| 一本色道久久天天射天天干| av天堂加勒比| 欲射影视| 婷婷五月天激情网| 新婚人妻扶着粗大强行坐下| 超碰在线人人射| 九色 蝌蚪 熟女自| 抽插爽| 亚洲激情网一二三四区| 亚洲国产精品成人综合| 日日干夜夜骑| 久久97资源 网| 亚洲综合五月天婷婷丁香| 麻豆综合一区av| 成人在线午夜视频一区| 97精品一二区| 99热精品在线| 免费黄色片。| 无遮挡又黄又刺激的视频| 亚洲精品熟妇1区2区3区。| 丁香五月天久久精品视频一区二区三区| 三级片网站在线播放| 黄色片一区二区三区四区五区| 女生久久网| 天天碰久久入| 九99久久| 97超碰免费生活| 少妇三P| 嗯嗯啊啊亚欧精品| 欧美综合骚| 午夜高清成人在线视频| 亚洲日韩欧美一区二区| 密臀在线免费观看| 久久久啊啊| 蜜臀久久久久久999| 国内精品久久久久影院亚洲| 久久夜黄色无码A级大片| 98久久| 青青欧美| 天操天操夜操夜月操月年年操| 桃色五月天| 丁香色五月 97干| 黄色电影观看久久9| 自怕偷自怕亚洲精品| 色哟哟AⅤ| 色吧5亚洲| 久久性爱视频免费看| 国产色产精品在线观看| 日本阿v天堂在线观看| 欧美影院一区二区三区| 久久久精品网| 夜夜爽夜夜操| 黄色成年| 人妻久久一区二区三区 | 综合五月天| 日韩有码一区三区| 伊人激情| 黄页18禁| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 熟女91网| 东北女人高潮视频| 国产97在线 | 亚洲| 夜夜嗨视频| 人人操,人人液| 亚洲av综合伊人久久| 国产乱伦亚洲| 日本道久久综合色色| 亚洲色诱惑| 久草精品热视| 性生活无遮挡纯毛片在线看| 欧美色综合图片| 欧美中字二区| 一直超碰| 色情婷婷久久五月天| 在线色资源| 色欲久久99国产精品久久久久久| 婷婷久久五月综合激情| 黄色av网站在线播放| 国产成人免费观看在线视频| 日本色婷婷| 亚洲不卡不卡中文字幕不卡 | 日韩精品国模| 78超碰| 欧美黄色片在线播放| 天天躁日日躁XXXXYY| 色香蕉影院| 殴美日韩m| 玖玖爱伊人玖玖爱| 蜜臀久久99精品久久久久久无删减 | 超碰亚洲欧美日韩无| 日本不卡二三区| 日韩BBN| 日本操逼aaaaa| 激情五月天社区| 大香蕉碰碰| 色哟哟-国产专区| 日韩精品9999| 91亚洲影视| 一本精品日本在线视频精品| 午夜男人一级A片7777| 色呦呦、国产精品| 青青草在线视频播放器| 丁香九月 婷婷| 大香蕉专区| 91狠狠综合久久| 加勒比海成人视频网| 91制服丝袜中文字幕| 亚洲无吗在线视频| 精品免费1| 怡红院网站在线视频| 超碰精品日韩欧美国产| 久久婷婷热| 色九九九综合| 蜜臀99久久| 亚洲一卡2卡3卡4卡乱码网站 | 69久久久久久久久久久久久| 综合97| 99视频自拍| 男人的天堂日本东京热| 国产精品内射婷婷一级二| 成人 日本A片无码8888| 日韩精品区二区三区不卡| 日韩av情韩国爱禁区av一区二区| 三级日本一区二区三区| 久久天堂婷婷网| 欧美成人精品一区二区男人蜜臀| av天堂精品久久| 91扒丝袜综合在线| 久久久9999| 日韩精品黄片免费观看| 人人色97| 91 天天综合| 亚洲精品精品一区二区| 亚洲熟女一区| 国产日韩精品无码去免费专区国产| 操逼逼无码| 亚洲精品97在线| 人人操人人操人人人操| 中文字幕欧美精品亚洲日韩蜜臀| 久久久久免费少妇| 欧美成人A天堂片在线观看| 少妇色欲综合网2| 久久一区无码| 亚洲αv一区二区三区| 日韩三级av片| 国产精品久久久九九九| 久久久久久波多野吉衣高潮| 一类av片在线看| 亚洲中文字幕乱码无码一区二区| 白 大 人妻 区 在线| 亚洲中文字幕av| 欧美白嫩女HD| 日本精品加勒比海一区| 97超碰9| 99999亚洲| 不卡一区二区日本视频| a人欧美综合天堂麻豆| a片偷拍视频| av优播| 天天影视色香欲综合网小说| 日韩久久超碰色| 夜夜精品视频| 人妻天天爽夜夜爽爽| 欧美黄色手机在线观看| 狠狠操狠狠| 国产99999| 大香蕉九九| daxiangjiao你懂的| 久久久麻豆精品| 91美女視頻| www久久99| 国产一区在线播放| 欧美无圣光在线| 日韩亚洲国产视频| 欧美亚洲韩国视频十五区| 免费黄色A片| 亚洲丝袜少妇在线| 91女网站| 亚洲精品xxx| 啪啪啪男女亚洲中文字幕99| 日本熟妇熟色97一本在线观看| 成人小说另类在线| 人妻熟女一区二区| 一级特级aaaa毛片免费观看| 精品无人区麻豆乱码1区2区图片| 淮穴色AV| 蜜乳Av成人片网站| 欧美色97| 欧美天天综| 日亚韩精品视频二区三| 久久区| 一本大道综合伊人精品热热| 一区二区三区四区久久视1| 成人av福利在线观看| 色偷偷综合91久久噜噜| 97蜜桃综合| 亚洲密乳AV| 亚洲伊人久久精品影院| 丁香五月影院| 99re国产精品视频| 94色色电影网| 亚洲色情在线影视| 欧美精品另类人妖xxxx| 干干干天天| 久久亚洲AV无码白度| 九九英色视频| 欧美日韩性爱视屏免费看了| 日韩激情无码影院| 992视频一区| 中文字幕超碰CAO| 爽爽淫人网| 人妻人人做人人澡人人爽欧美一区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 91爱综合| 欧美中出1| 久久成年片色大黄全免费网站| 久久综合av| 亚洲伊人久久精品狠狠在线| 探花精品视频| 国产一区二区三区视频在线看| 91人妻熟女| 国产精品69久久久久孕妇欧美 | 午夜精品久久久99热蜜桃的功能特点| 性色avv| 五月天开心网| 91三级理论片播放器| 久久国产逼| 欧美后入式| 四虎在线播放| 天天享受天天看| 中文伊人大香蕉视频| 在线国产探花| 大香蕉视频一二三区| 极品色| 91熟女网| 国产又粗又长又大的视频| 色哟哟av网址| 九九九九九九视频| 亚洲色图91欧美日韩| 综合久久中文字幕综合日韩精品| 一牛影视成人片免费| 国产女s强制榨精视频| 99无码狠狠久久| 欧美色图亚洲激情| 欧美性夜| 果冻传媒A片麻豆熟妇人妻| 成人免费福利在线观看| 天天操天天射天天日| 丰满美女一级毛片在线播放| 家庭乱伦麻豆| 精品无码一区二区三区色欲| 激情啪啪视频| 久久97资源 网| 综合色图,成人综合网| 家庭乱伦国产| 老司机福利青青草| 天天日天天操天天射河南省| www.人人摸在线视频| 亚州欧美另类| 91中文字幕制服丝袜免费视频| 97亚洲综合在线| 97人人爱人人乐| 91综合站| 日韩性爱啪啪视频| aaa亚无码专区| 国产精品爱欲| 操逼逼中文字幕| 日韩极品无码B| 最新国内自拍av免费| 日韩中文字幕国产| 亚洲αv一区二区三区| 韩国午夜理伦三级好看| 中文自拍欧美影视| 26uuu国产日韩综合在线观看| 日本人妻最新在线中| 午夜国产综合视频在线观看| 沈阳熟女高潮对白视频| 中文字幕AV乱伦| 国产免费内射视频| 欧美日韩中文视频播放| 久久 国产 无码| 探花熟女,姿勢到位,體驗感也到位| 伊人久操| 大香蕉亚洲中文| 亚洲精品欧洲精品| 日韩精品影视| 午夜爽爽爽| 国产91会所女技师在线观看| 亚乱色| 综合婷婷| 蜜臀久久99精品久久久久免费观| 嗯嗯啊啊操死我| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 亚洲自拍青操视频| 三四中文字幕| 思思热一热婷婷热一热| 日韩人妻精品中文字幕| 夜夜春夜夜操| a'v在线资源| 婷婷视频在线免费观看| 8050无码八戒| AV天堂丝袜| 加勒比综合a∨| 蜜桃香蕉久草精品在线| 国产自制av蜜乳| 丰满人妻一区二区三区| 看大黄色大片原件| www.超碰| 99蜜桃臀久久久欧美精品网站| 国产精品乱码久久| 人人看欧美性爱| 亚洲男人天堂网久久| www.acm成人黄色毛片| 久久伊人青青草| 超碰吊日色| 亚洲一区二区三区AV无码| 欧洲免费一区二| 蜜臀久久99精品久久久久久成人小说| 日韩色欲久久一二三四区| 蜜臀久久一区二区| 亚洲天堂久久| 色狠狠 - 百度| 看看小穴| 天美传媒精品久久视频| 欧美日韩大黄片| 九九aV| 久久综合久色欧美综合狠狠 | 亚洲97| 久久HD| 国产第11页| 欧美Ⅴ性爱| 激情五月激情综合网| 中文字幕国产精品1区| 少妇高潮喷水无套久久久久久| 亚洲电影中字一区二区| 熟女精品一区二区三区| 另类专区加勒比| 国产AAAAAABBBBB| 91色久| 91新在线欧美| 欧美色图20P| av天堂5| 精品中文日韩字幕视频| 久久精品国产精品一区 | 少妇的嫩逼图片| 婷婷丁香九月| 91久久午夜无码鲁丝片久久人妻| 亚洲 在线| 色色综合网站| 熟妇高潮二区三区| 国产91乱伦| 亚洲中文字幕日产无码久久| 亚洲欧美另类激情小说| 天天综合色电影| 国产超碰97| 欧美自拍偷拍免费观看| 九9热伊人| AAAAAAAAA黄片| 五月开心久久AV官网| 在线视频97| 综合国产97| 亚洲自拍偷拍视频在线| 色婷婷基地| 美女t无毒不卡不卡| 伊人久久大香线蕉无码| 久久超碰98| 一区二区三区视频国产免费| 欧美一二在线| 久操操AV电影| 伊人97色天使| 92性色国产午夜福利在线661| 欧洲熟妇xxXx欧美老妇裸体| 日韩日韩日韩-国产乱码精品一区二区| 无码人妻丰满热妇又大又粗| 国产吹潮女在线观看| 欧美日本一区二区a人| 亚洲欧美视| 在线国产探花| 黄页av| 日韩伦理视频| 亚洲精品国产无码高清| 999 久久久| 亚洲欧洲综合成人av一区| 精品v1区| 伊人久久大香线蕉无码| 99久久网站| 九九热av| 4141514逼喷水三级片| 91爱| 有码色中文字幕在线观看| 2019久久久久久久久福利| 97爱啪| 樱花蜜乳av| 18禁久久| 夜夜中出国产| 亚洲AV成人无码一二三久久| 超碰在线974| 日韩色| 97综合激情| 鲁鲁色综合网| 在线看的av| 亚洲精品97p| 中文字幕日韩国产传媒欧美精品| 人妻二区| 一本色道久久综合狠狠操| 伦理片秋霞免费影院| 国产精品另类| 黄网站黄视频网站进入口| 91美女小视频| 欧美性爱一内片一区二区三区| 国产精品久久99日日| 日骚逼视频| 中文字幕女同在线| 极品白嫩福利在线| 久色网| 国产熟女完整版中字| 五十路一区无码| 成人天天看站长推荐| 五月天大香蕉| 日本操逼视频不卡直接放| 精品国产乱码久久久久久日本公司| 久久国产三区| 夜夜影视四色| 色悠悠伊人网五月天| 福利一级版子| AV天堂丝袜| 在线观看综合精品亚洲| 九月激情婷婷| 超碰美女97| 日本中文字幕一区| 国产污视频麻豆传媒一区二区| 性做久久久久久免费观看软件| www久久国产精品| 国产精品成人午夜福利| 情侣操 逼视频99| 理论久久婷婷网 8| 中文字幕人成乱码熟女香港| 欧洲久久一二线| 偷拍新久久| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 精品对白久久不卡| 亚洲怡春院| 91电影色诱| 天综合网| 成人综合色网| 国产福利第一视频| 岛国色情视频在线观看| 清纯唯美激情| 国产AV天美传媒一区二区三区 | 色婷婷丁香五月| 91精品久久综合熟女| 日韩av在线播放不卡| 欧美日韩国产另类综合| 欧美亚洲| 欧美翘臀视频网站一区二区三区 | 亚洲天堂 视频你懂的| 欧美性爱视频免费一区一A| 日本成人A片网站| 日本性感人妻91| 五月丁香六月综合缴清无码 | 国内精品久9| 国产99999久久精品| 欧美激情欧美精品| 黄色乱论网站| 久久人人妻| 日本三级韩三级99久久| 婷婷综合网| 97干在线视频| 国产精品国产拍高清AV| 99色热| 五月丁香六月激情| 婷婷五月天成人网| 久久人人妻| 艳美熟妇先锋一二三区| 天天操夜夜操| 精品久久久久瑟瑟| 中文字幕制服欧美久久一区| 国产suv精品一区二区四| 裸模AV女优| 色九九九九| 欧美日韩青操| 欧美色图99| 色约约一区=区三区| 亚洲色电影在线| 国产一区二区成人av在线播放| 91福利网在线观看| 神马久久久久久久| 欧美激情性爱视频网站| 激情五月天插| 婷婷在线视频在线观看| 亚洲午夜福利在线影院| 性做久久久久久久| 操美女高潮抽搐白浆| 婷婷色婷婷| 亚洲青青青视频在线| 97超碰逼| 另类专区加勒比| 欧美日韩青操| 免费成人自拍视频在线| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 极品少妇久久久久| 天天操妹子| 亚洲久久久久| 国产亚洲欧美每日在线| 国产成人网站在线观看| 91狠| 亚射在线|