日韩精品一区二区三区在线视频放-无码中文字幕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 開(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
返回資訊列表
九九热午夜欧亚国产视频| a人欧美综合天堂麻豆| 欧美大香蕉97| 91老熟妇| 麻豆伊人网| 国产精品探花色| 91在线免费观看处女| 天天精品| 骚逼自拍99| 2019久久久久久久久福利| 内射黑人| 国产精品麻豆免费视频| 色九月综合| 男人天堂网站| 任我爽视频在线观看| 日本色日夜干| 九九热精品免费视频| 欧美一区二区| 久久手机视直播| 九九九久久久| 久久综合精品一区二区三区| 一级人妻性爱视频| 内射黑人| 欧美一级久久久久久久大片动画 | 人妻中文字幕精品无码| 国产精品久久久久久久免牛肉蒲团| 女同女同恋久久级三级| 91爱欧美| 97久久久久久久精| 激情无码日韩| 99热在线播放| 丝袜色综合| 婷婷亚洲综合| 亚洲精品国产精品成人| 精精品人妻一区二区三区| 欧美熟爽综合| 先锋色眉乱伦资源| 久久久555| 91精品电影18| 精品一区二区成人| 97视频免费| 97网址www| 亚洲视频一二区| 国产辣妈在线视频福利| 9 9无尺码天堂网| 日韩欧美一级特黄大片| 搡老女人老熟女91老熟女综合网| 青青草十区九区爱夜| 欧美黑人精品在线播放| 69一区二区三区| 国产婷婷一区| 婷婷尹人大香蕉免费| 麻豆三极片| 97精选久久| 婷婷五月成人| 成人小说视频在线精品欧美| 肥臀熟女一区二区三区视频| 亚洲蜜臀懂色| 日本日逼视频网| 欧美色欧美| 一本久久精品中文字| 99热最新| 久久东京伊人一本到鬼色| 亚洲人妻色图| 啊啊啊慢点| 亚欧免费| 国产一级内射高清视频| 九九热精彩视频| 五月丁香综合激情| 午夜福利免费精品视频| 无遮挡男女激烈动态图| 欧洲熟妇xxXx欧美老妇裸体 | 日韩乱码Av| 久久男人精品| 农村女一级毛卡片| 97久久久网站| 天天插天天操天天摸天天射天天看| 首页亚洲国产高跟丝袜诱惑视频 | 亚洲欧美清纯| 日韩综合97p| 久久风骚城市| 欲香欲色天天天综合和网| 黄色一级视| 黄色电影在线播放综合网站 | 美女黑人91神马| 老鸭窝亚洲毛片| 日韩去日本高清在| 亚洲精品中文字幕一区在线视频| 亚洲综合有玛| 日韩九区| 2011国产精品| 亚洲熟妇A V黑人| 影音资源男人日韩| 亚洲日韩久久精品一区| 超碰天天操你比| 黄色网址在线免费观看| 久久久精品日本一道| 麻豆国产96在线| 最近2018中文字幕在线高清第一页 | 欧美天堂超碰97| 亚州操操穴网| 97精品一区二区三区免费| 丰满人妻一区二区三区大胸懂色| www亚洲免费| 家庭乱伦麻豆| 夜夜騷av、一區二區| 熟妇国产免费一区| 亚洲欧美综合网| 天天综合青苹果| 精品久久久高清无码| 激情五月综合网| 91天堂色男人的天堂| 亚洲精品国产熟女| 国产精品欧美日韩久久| 久久伊人大香蕉| 日本道久久综合色色| 一级啊性爱在线视频| 亚洲av无线观看| 岛国视频免费在线观看| 激情五月天社区| 91丨九色丨43老版熟女| 日韩图区| 久久久久久无码人妻中文字幕| 99re热| 亚洲鸥美色图| 97国产|免费| 五月色综合| 亚洲色天堂九9| 91成人久久| 青青操狠狠撩| 久久久99免费| 欧洲射精91| 综合色拍| 亚洲。日韩。欧美| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 久久六六| 亚洲国产精品成人无码久久久| 国产AV激情无码久久无码| 韩国黄片aaaa| 色欧美天天| 一区中文字幕二区日韩| 色眯眯av| 亚州色综合| 欧美真人抽搐一进一出gif| www.大香| 日韩精品人妻系列无码天堂| 日韩性色| 国产精品人人爽人人做可爱福利| 日本熟妇人妻中出视频| 少妇精品久久久| 日韩日韩日韩-国产乱码精品一区二区| 国产后入式在线观看| 麻豆久久一区二区三区| 国产亚洲精品农村妇女| 国产蜜臀精品一区免费尤物| 久久AV色| 日韩免费簧片| 久久XX| 超碰公开久久网| 久久久久久夜夜夜夜夜| 嫖老熟女A片一二三区| 97久久国产精品| 丝袜性亚洲| 欧美成人贴图| 欧亚揄拍偷拍精品视频 | 凹凸 69堂 在线播放| 啪啪啪精品视频| 国产树林里野战在线看| www.av在线视频| 超碰综合97在线| 爱我干综合| 人人摸.人人色| 天天超级碰碰碰| 亚州欧美综合| 日本精品中文字幕视频| 色婷婷视频| 亚洲国内精品成人不卡| 三级日韩一区二区三区| 亚洲综合网电影91| 91青青| 无码人妻精品一区二区三区九九| 欧美精品三级黄片| 丁香婷婷色五月| 加勒比伊人综合| 国产偷人伦激情在线观看| 97干在线视频| 97欧美色| 国产亚州精品美女久久久免费| 青青草黑寡妇男人天堂| 亚洲无码精品AV久久久| 欧美少妇大量自拍视频在线观看| 99久久99久久免费精品蜜臀| 久久久久13| a啊啊啊啊啊啊啊啊一区二区| 一级性爱啪啪视频| 91撸色网 玖玖网 欧美| 婷婷综合在线观看| 伊人热综合| 艾草av| 97在线视频观看| 91蜜臀在线久久久久| 美女9118禁| 嗯啊不要在线观看嗯啊| 大香蕉中文在线| 久久久久成人蜜桃精品| 亚洲精品久久久久毛片A片拉屎| 开心五月天激情网| 乱伦强奸区日韩| 人妻插插人妻人| 欧美夜夜草视频| 91亚洲影院综合| 日本久久女同性恋视频| 蜜臀AV成人精品蜜臀| 影视综合无码少妇| 91女优在线观看| 色乱二区| 91亚洲欧美| 日韩中文字幕熟妇人妻 | 91爱综合| 欧美一区二区观看在线| 国产精品久久久久综合| 骚货人妻偷情自拍在线视频| 亚洲高清视频在线免费观看| 欧美综合加勒比在线| 亚洲成人在线高清| 亚洲97网站| 香蕉在线一区二区三区| 亚洲欧美天| 国产精品直播在线观看直播| 日本在线视频导航| 波多野42部无码喷潮在线观看 | 人人操人人干网页| 午夜精品久久久99热蜜桃的功能特点 | 91麻豆天美国产| www.99中文字幕| 97在线亚洲| 老鸭窝亚洲毛片| 狠狠中文字幕| 亚洲成人贴图| 中文字幕视频免费| 亚洲国产精品久久久久久久久久| 大香蕉www.超碰| 热热色综合网| 青青操在线亚洲视频观看欧美在线 | 激情黄色片在线观看| 天天躁狠狠躁av| 欧美国产视频| 欧美亚洲色图另类国产| 欧美性xxxxx狂欢| 黄页av| 亚洲男人天堂2| 婷婷五月天激情网| 欧美在线色| 色波多| 亚洲激情综合| 97超碰香蕉| 欧美姓爱综合网| 亚洲视频精选| 好吊色综合| 凹凸久久人人| 欧美在线伊人色| yazhououmeizongya| 99热这里只有精品18| 99国产精品视频尤物| 91视频伊人| 久久久久久少妇| 午夜精品久久久99| 日韩紧密久久| 久久久久久波多野吉衣高潮| 97婷婷色| 精品高清av中文字幕| 亚洲国产福利视频| 自拍视频大全亚洲专媒视频/一区二区三区 | 欧美亚洲情色| 日夜精品| 国产精品电| 亚洲色图欧美色图另类图片| 色情综合网| 黄色片G G G| 综合久久久久久久久91| 天天拍天天操| 91 丝袜在线播放| 91女优在线观看 | 精品毛片av一区二区| 一级性爱视频免费观看| 国产成人精品一区| 人妻色情天天操| 好爽要喷了| 青青欧美| 中文字幕福利视频一区二区三区在线观看| 精品制服美女中文一区二区三区| 蜜乳av一区二区三区四区不卡| 蜜臀久久精品久久久久视频| www.av家庭乱伦| 麻豆 欧美 日韩| 亚洲天天自拍| 婷婷五月天激情网| 亚洲人妻色图| 加勒比大香蕉视频在线| 大香蕉中文在线| 中文字幕日韩人妻视频一区二区三区 | 色黄色美女大长腿午夜视频| 亚洲一级性爱视频免费看| 91精品人妻偷情| 51久久夜色精品国产麻豆| 久久久性| 国产麻豆福利av在线播放| 久久人妻97久久久久久久| 国产精品免费视频人成| 在线视频日韩欧美国产| 国产农村妇女毛片精品久久| 国产亚洲99久久精品熟| 欧插网站| 午夜精品五区| 久久男人的天堂国产| 欲射影视| 天天插天天操| 歐美一級亂黃99在綫精品| 久久久国产三级黄色片| 男人天堂2019亚洲| 97鸡把在线视频| 日本操逼视频导航| 91bbbbbb| 蜜臀99999| 操逼1区| 四虎av在线| 天天摸,夜夜摸| 精品人妻一区二区三区四区石在线| 91丝袜美女| 99久久精品无码一区二区| 91老司机在线视频免费观看| 日本天天吊| 黑人精品久久97| 99视频自拍区| 乱性AV| 久久人人舔人人爽舔人人av片| 日本亚洲熟女视频| 无码一区二区三区四区五区六区七区八区九区十区视频 | 91社操逼| 日日干日日| 久操 高清| 在线无码操| 六月激情婷婷| 北京美女一区二区| 九九人人操| 唯美清纯 妖精视频| 日韩操逼HD| 日本人人操人人操| 少妇极品熟妇人妻无码| 精品国产无码中文| 超碰这里有精品| 欧美成人精品一区二区三区| 亚洲色图欧美视频| 国产日韩欧美操逼视频| 99999国产精品| 亚洲天堂性爱| 天天爱综合网| 男插女青青影院| 色香色欲天天综合网天天来吧 | 国产综合永久精品日韩鬼片| 97久久精品亚洲中六字幕| 久肏视频字幕| 丁香六月东京热| 天堂中文资源在线bt| 日本不卡中文| 疯操AV| 99热8| 超碰人妻中文在线| 日韩精品99久久久久久中文字幕 | 亚洲精品色| 一卡二卡在线播放| 乱伦av.com| 国产乱弄免费在线视频。| 女人久久久| 高清国产av无码| 熟妇激情| 中文字幕精品日韩中文字幕| 久久神马影院| 欧美日韩国产一区二区小黄片大全| 99久在线精品99re8热| 黑人精品一区二区在线播放| K8久久久久| 综合天天。| 亚洲文学偷乱拍啪啪啪啪| 久草男人天堂| 淫穴高潮色图| 久久久999国产精品| 亚洲亚洲亚洲天堂天堂| 久久久久久人体| 好湿好紧视频| 探花精品 一区二区| 久操免费电影| 大香蕉日韩| 国产女大学生AV| 久久大黄片| A片大香蕉在线| 91痴汉| 日韩av不卡在线看| 天海翼久久| 一牛影视成人片免费| 国产妇女精品视频青青草| 国产成年女人免费视频播放a| 一区二区精品更新提醒| 欧美性巨大╳╳╳╳╳高跟鞋| 国产sv美女内射| 97久久国产亚洲精品超碰热| 97精品免费视频网站| 欧美亚洲综合高清在线| 日本国产欧美一区三区二区 | 少妇二级| 欧美72网页| 青操影院| 91美女小视频| 免费日韩黄片| 九九热AV| 久久欧洲| 亚洲综合色图欧美| 久久永久无码人妻视频| 手机在线观看不卡无码av| 久久99视频| 嗯嗯啊啊用力视频免费| 亚洲久久东京热一二三四五区视频| 国产有码一区| 三级精品三级在线观看| 91熟女.com| 国产免费一区二区三区最新不卡| 亚洲啪啪视频免费| 国产超碰欧美| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 国产精品制服丝袜中文字幕日韩一区二区三区 | 情色日播放AV| 亚洲图片欧美另类综合免费视频大大香| 色爱天堂| 日韩一级成人毛片免费观看 | 日韩熟女无码| 亚洲精品视频在线播放| 亚洲综合性网址| 69一区二区三区 | 中文字幕1区2区| av爱爱爱| 91亚·色| 天天影视亚洲| 亚洲aV性爱| 夜夜国产一区| 欧美精品亚洲精品日韩传电影| 999在线电影香蕉| 免费一级a毛片久久久久久鸭绿欲| 午夜福利一区二区三区四区五区色婷婷| 91久久久久免| 国产男人又猛又粗又爽| 日韩性爱啪啪视频| 老熟女综合网| 日韩亚洲中文字幕在线| 丁香六月婷婷综合| 91色欧美| 97人人草| 伊人九九| 大香交伊人网| 日韩欧美传媒一区国产| 日本色色网| 欧美日日人人天天| 8050无码八戒| 亚洲蜜臀精品视频久久| 国产精品久久久久无码AV会牛| 天天综合欧美综合| 日韩欧美大片免费高清啪啪| 亚洲有薄码区日本系列中文字幕| 国产三级片在线观看| 99热超碰在线| 青青草好吊色| 国产又爽又黄| 国产成人免费观看在线视频| 中文字幕在线观看永久| 亚洲影院365| 日韩三级伊人| 久久久久国产精品久久久| 亚洲综合色图欧美| 91无码人妻精品一区二区三区蜜桃 | 亚洲国产精品无码AV久久| 9九九九九视频在线观看| 4虎在线观看| 97中文天堂| 99久久亚洲精品无码毛片潘甜甜 | 人妻二区| 天天操美美| 日韩欧美中文日韩欧美色| 成人片视频| 粉嫩在线一区二区懂色| 9 7超碰在线免费观看| 99热网站| 久久久久久大| 天天综合香 ld视频| 久久久久一本一区二区青青蜜月| 日本三级人妻a人妻一在线| 男人天堂婷婷五月天校园春色| 色五月婷婷麻豆在| 午夜激情床戏激情| 成·人免费午夜在线观看| AV中文在线| 亲子敌伦对白在线播放| 婷婷15月天青娱乐| 亚洲国产日韩欧美熟妇在线| 日本淫乱女一区二区三区视频| 久久AV无码1区2区3区| 午夜寂寞欧美| 亚洲毛片基地专区| 涩涩久久精品| 天天影视网综合少妇| 97精品一二区| 亚洲熟妇乱女区二区三区| 一区二区三区日韩欧美| 偷拍五区| 午夜男人的天堂| 欧美精品精品一区二区| 懂色av色欲av蜜臀av| 十八禁成人网站在线观看| 破苞ⅩXXX性无码动漫无码| 蜜臀人妻少妇久久在线观看| 精品国产人成在线| 91综合在线| 综合一区二区影视| 密臀在线免费观看| 国产精品久久久久久片| 国产精品欧美激在线| 大香蕉久操| 9国产超碰| 情色图区| 黄呦呦在线| 国产一级内射无挡观看| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 德国一二三不卡| 91人妻少妇| 亚洲国产剧情少妇激情| 性色av婷婷久久一区二区点复制| 肏逼视频日本| 91精品国产一区三一| 99精品热| 啊啊啊不要好疼视频| 91人妻做a观看视频| 亚州性9| 青草影院内射高潮| 狠狠躁天天躁日日躁| 99热网站| 亚洲 日韩 欧美 国产综合体| 狠狠操夜夜| 97视频网站| 亚洲性高潮| 韩日自拍| 国产精品一区二区后入| 18岁禁 茉莉成人久久| 色五91| 大香交伊人网| 99精品免费| 日韩欧美午夜一区二区| 狠狠91| 久久久久久九九九| 久久久青青草| 人妻喷水| 精品十八在线观看| 99精品无码| 91n处女在线观看| 91亚洲狠狠色| 蜜桃臀久久| 欧美淫乱视频| 日韩无码服务区| 蜜臀久久久| 色九九九九| 精品十三区| 女人的天堂大香蕉网| 99综合自拍| 欧美一级欧美三级在线观看| av大香蕉网站| 性性欧美| 热热色AV| 国产嫩草精品A88AV| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 97超碰免费人人性爱| 天堂综合| 蜜桃臀av一区二区| 九九九久久久W精品| 60秒不遮不挡| 国内偷拍精品一区二区| 欧美日日人人天天| 国产精品视频在线观看| 国产一级高清免费观看| 久久受www免费人成| 无码区蜜乳| 久久激情亚洲精品无码?V| 亚洲经典啪啪| 黄页大片在线观看| 国产精品一区二区后入| 老色鬼成人精品视频下载大在线观看| 天天综合网亚洲综合网| 在线综合网| 777琪琪午夜免费A片| 人人操人人大香蕉| 亚洲熟妇自偷自拍另欧美| 日韩内射视频| 国产夫妻性生活视频| 美女黄页网站| 91人妻丝袜无码| 亚洲老司机123专区| 一区二区亚州激情久婷婷欧美| 欧美一级二级三级| 丰满美女一级毛片在线播放| 亚洲综合精品国产一区| 人妻久久久久久久久久久久久久久| 美日韩一卡二卡三卡免费人妻精品| 99色骚| 在线洲亚线| 97欧美精品| 色色97爱| 国产精品无码久久久久2025| 操逼片中文| 少妇一线天久久久久久| 蜜桃色院一区久久 | 日韩99999| 日韩欧美成人午夜福利| 老司机深夜18禁污污网站| 岛园激情| 99热精品国产| 国产精品96| 日本在线不卡v二区| 欧美欲色| 国产日本一区二区三区蜜臀在线观看| 国产精品一级毛片不卡视| 午夜精品久久久久久久男人的天堂| 欧美激情片一区二区| 一区二区三区四区理论片| 国产91乱伦| 中文一区二区婷婷视频| 2017天天操天天日| 东北丰满熟女国产一区| 亚洲丝袜B诱惑| 欲香欲色综合天天伊人| 啪啪免费| 欧美伦乱爱| 91中文字幕| 丁香五月久久| 久久久久久久久国产| 国产真乱mangent| 午夜精品探花| 天天日熟妇| 欧美91视频| 久草精品视频| 人人 操人人 操人人| 人人澡人人爽人人精品| 淫乱图区 | 亚洲九九视频| 91中出在线| 91社区拍啪人妻| 国产欧美日韩臀| 国产中出内射一区二区| 乱老女人一区二区视频| 熟妇高潮二区三区| blacked精品一区国产| 久久人妻无码毛片A片麻豆| 日韩欧美操逼xxx| 免费网色网站| 国产精品区在线12p| 欧美十八禁在线看| 激情婷婷丁香网| 自拍鲍鱼一区在线高清观看免费| 青青操日韩| 九九黄色网| 国产400孕妇孕交群| 亚洲精品成人激情在线| 色 亚洲 91| 久久久久免费看少妇A片特黄| 97人肏| 九九九国产精品| 搞中出久久| 97精选久久| 国产福利电影| 久久伊人青青草| 午夜一区二区三区国产| 91色s| 凹凸视频特色日本特黄| 岛国大片国产| 大香蕉之青青草原| 中文字幕jul-617人妻熟女| 亚洲AV噜噜狠狠网址蜜桃动漫| 日日夜夜精品视频| 伊人网高清| 中文三一区| 久久精品噜噜噜成人看免欧美大片| 久久亚码| 爱干爱射网啊啊啊| 久久精品亚洲婷婷| 五月天婷婷欧美三区| 中文字幕在线观看丝袜| 很很干很很操| 国产夜夜操| 夜夜操91744565| 九九热精品免费视频| 欧美极品少妇交| 深爱五月天| 骚逼高潮久久精品| 久久男人的天堂国产| 色妺妺在线视频| 中文字幕91综合| 女生自91网站| 老鸭窝黄色视频网站| 久操视频免费观看| 亚洲中文字幕一区| 97在线资源| 99re在线视频这里只有精品| 精品少妇一区二区三区免费观看| 综合色图亚洲欧美| 天天欧美色| 精品国产嫩穴视频| 99re8免费高清在线| 99国产精品免费| 后入福利视频| 青青草大香蕉视频| 私人尤物在线精品不卡| 欧美18 在线观看| 午夜福利av电影在线| 操逼啊啊啊91| 黄色片大香蕉| 欧洲无码一区二区| 在线黄色污污网站| 后入式福利| 欧美日韩1234| 狠狠中文字幕| 大香蕉久久| 开心六月色| 东北操逼| 久久超碰97| 懂色av色欲av蜜臀av| 激情国产乱伦Av| 开心五月婷婷激情| 人妻插插人妻人| 亚洲日韩XXX| 少妇无码999| 91精片| 操高情无码| 男人的天堂2010| 伊人操操| 日夜伊人网| 超碰人妻天天干| 大香蕉色十月| 岛国不卡超碰护士AV在线播放| 91精品91久久久中77777| 日本高清视频xxxx| 亚洲αv一区二区三区| 黄色网址久久精品欧美喷水| 亚洲熟女乱综合一区二区三区| 丝袜足交视频| 国产精品制服丝袜清纯唯美| 美腿色图| 中文字幕青青草| 欧美一级久久久久久久大片动画| 91国产精品在线看| 97在线欧| 欧美激情性爱视频网站| 天天淫人人妻日日色| 欧美极品少妇| 草草影院最新网址| 久久久亚洲精品电影免费看| 91熟女.com| 精品无码欧美三级| 亚殴在线| 亚洲中文sv| 100啪啪视频大全| 久超碰在| 国产又粗又长的视频| 国产精品久久99日日| 成 人 影视 一区 二区 三区 四区| 中文字幕无码不卡啪啪| 欧美性爱免费短视频| 美女超碰978| 亚洲色图 91| jizzjizz欧美| 91爱看| 日本人妻中文字幕精品| 99人人干| 超碰97人人乐| 久久精品国产免费观看99| av东京热男人的天堂| 都市久久精品激情亚洲| 夜夜操av亚洲一区二区| 色综合91好| 丁香五月社区| 另类欧美色| 天天爽人人综合免费7799| 茄子社区国产精品| 日本人妻伦在线中文字幕| 吉川爱美98堂在线| 无遮挡男女激烈动态图| 黑人天8A∨高清网站| 12一15性XXXX粉嫩国产| 欧美爆操91| 亚洲黄色视频在线观看视频| 日日橹狠狠爱欧美超碰| 国产精品免费1区2区视频| 日日夜夜草草草| 人人操人人操人人人操| 久操网在线| 亚洲制服aⅴ中文字幕| 中文熟女五十乱码在线| 国模无码一区二区三区在线| 干b网| 国产成人精品日本亚洲语言| 天天欧美| 国产丝袜视频| 日韩免费高清大片在线| 大香蕉国产中文自拍| 少妇啪啪自拍| 亚洲欧美色综合| 日韩精品免费高清视频在线| 狠操91,com| 抽插无码高清一区| 91天堂| 天天操天天射青青草| 人人操人人插 - 百度 - 百度| 欧美日韩婷婷中文| 国产区91柔拿会所技师| 久久久一二三四区| 99性爱| 成人无码在线视频网站| 亚州色图片在线色| 精品久久99| 日韩免费a级毛片无码a∨| 97香蕉人人乳| 欧美系列在线一区二区| 大香蕉2017| 青青爽| 亚洲五码一区二区三区| 999国产精品999久久久久久| 亚洲色天堂日韩中| av无线看| 99精品综合久久久久五月天| 国模限制级电影| 国产人伦a片信息免费片| 偷拍亚洲情色| 91av天美性媒精品视频| 大伊香蕉在线视频免费| 日韩免费中文字幕视频| Julia Annxxxxx| 久久99黄色卞西瓜| 手机在线A片| 黄色大片视频在线免费看| 婷婷15月天青娱乐| 亚洲另类综合欧美| 成年人网站在线免费观看| 精品久久久久成人码免| 色女网日韩| 一区二区娱乐网站| 国产91 丝袜在线播放00-百度| 啊啊啊不要好爽日韩无码一区| 日人妻视频91| 成人a v在线播放免费| 亚洲图片 欧美电影| 五月天综合网| 亚洲日本韩国极品一区二区| 天天色综亚洲91污| 成人无码在线超碰网| 久久在肏| 中韩中文字幕在线观看| 97色色,97综合| 欧美综合自拍成人自拍第二十页| 亚洲暴力强奸AV| 欧美组图日韩亚洲中文字幕| 天天舔日美女视频| 欧美国产成人在线| 日韩三四五区| 亚洲高清无码免费观看视频| 91色色网站| 91无码人妻精品一区二区三区蜜桃| 久视频在线观看| 99热9| 综合久| 中文自拍欧美影视| 国产精品亚洲高清在线| 久久婷婷电影网| 亚洲国产天堂| 亚洲精品黄码久久久久| 91熟女.com| 91高跟美女在线播放| 日本一区二区电影网站| 亚洲精品视频在线| 欧美色色色| 亚卅熟女乱色| 亚洲综合九九| 日韩欧美国产高清视频| 青青操狠狠撩| 看黄片视频免费| 天堂俺去俺来也www久久婷婷| 青青草一区二区高清无码视频| 亚州欧美总和| 精品乱码在线观看| 老司机午夜精品福利视频一区二区| 久日91在线| 日韩视频小说在线观看| 久久久专区| 老司机午夜福利视频一区二区| 国产精品一区二区后入| 日夜干射色啊| 在线情色电影 91大| 亚州综合电影| 精品一区二区麻豆| 九九国产| 日本黄色天堂| 综合亚州欧美| 91欧| 色欧美亚洲| 亚洲欧美日韩偷拍色图| 欧美激情一区| 色屁屁影院www国产| 91色人妻| 国产黄色av大片网站| 岛国艾薇凹凸视频天堂| 丁香五月天激情网站| 日本123区操B视频| 伊人五月天| 男人兔费天堂| 欧美天堂日韩三级国产传媒| 亚洲永久永久永久永久一级一级一级精品 | 五月激情小说| 午夜男人天堂| 91亚州欧美| 天天躁狠狠躁av| 风韵犹存大大大大香蕉 | 香蕉免费一区二区三区不读| 久久精品99久久久久久| 中文字幕av一区二区三区人妻少妇 | 激情专区综合| 中文字幕日韩综合| 久久久性爱视频| 有码人妻系列| 干B| 天堂综合网| 国产在线观看一区二区三区| 无码操逼网| 久久久婷| 性性久久| 蜜桃久久一区二区| 伊人久久综合影院精品久久久 | 久久草视频污视频| 亚州色图片在线色| 国产sv美女内射| 亚洲色图尤物视频| 天天插天天操| 久久综合女优| 大香蕉一人| 免费A片三p视频| 国产精品爱欲| 香蕉久久国产AV一区二区| 精品无人区麻豆乱码久久久| 本道在线| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 精品成人亚洲午夜电影| 久久婷婷五月天| 97大色网| 亚洲熟女av中文字幕| 国产精品99精品视频网站| 欧美日综合| 一直超碰| 国产精品日日摸夜夜添骚逼| 国模无码一区二区三区在线| 欧美色棕合| 天天碰久久入| 欧美国产精品| 艳美熟妇先锋一二三区| 色97欧美| 欧美丰满少妇xx高潮| 九月丁香婷婷| 亚欧美综合网| 国产一级作爱毛片| 亚洲五区熟女| 91人妻熟女| 欧亚免费视频| 另类av综合久久| 97在线看| 屌逼麻豆| 天天操熟妇| 在线观看亚洲专区| 欧美精品91| 福利视频网站| 亚洲黑丝在线| 日韩欧美资源| 最新三级网址| 亚洲中文人妻色| 色97干| 五月丁香网站| 人妻黑丝袜电影| 日韩一级性爱无码| 夜夜嗨一区二区| 精品无av| av天堂5| 亚洲激情欧美色图| 国产亚州高清国产拍精| 久久久久久久久久久久黄色| 97天天摸天天爽| 婷婷丁香熟妇综合网| 天天综合网亚洲综合网| 中文字幕一区二区在线日韩精品| 精品国产污一区二区三区| 97久久国产| 五月婷婷六月激情| 欧美碰碰综合色| 婷婷丁香五月综合| 天天影视91看看| 8050午夜少妇无码| 欧美偷偷网| 日本午夜精品理论片A级APP发布| 最新9久久久9免费视频| 国产精品一级片在线看| 色臀aV| 人妻精品一区二区在线| 亚洲精品蜜桃久久久| 99∨VTV| 熟女精品日韩一区二区三区| 99热啪啪| 天堂性色| 久久久亚洲精品电影免费看| 91熟女视频| 欧美日韩理论一区| 乱伦一区二区三区‘| 牛牛久久国产精品视频一二三| www亚洲免费| 无码人妻精品一区二区三区九九| 欧美日本中字另类在线| 日日骚av| 天天做天天爱天天爽| 大奶的诱惑| 69精品少妇一区二区三区蜜桃| 9118禁| 爱欲AV| jk白丝没脱就开始啪啪| 97jingpin| 久久久精品国产亚洲伊人| 久草加勒比一区在线| 天天摸夜夜摸| 2019久久久久久久久福利| 日韩精品亚洲一二三| 久久久久成人蜜桃精品| 91AV入口| 麻豆伊人网| 日韩亚洲中文有码视频| 日本大香蕉综合网| 四虎AV无码| 人妻一区视频| 好爽视频在线观看视频| 久久欧洲| 国产AV高清AV无码| 2017av无码免费无线播| 亚洲成人色情五月天丁香花| 日韩中文字幕二区| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 国产国产亚洲一二三久久| 久久久草成人网站久久久草成人久久久草久久久| 女人天堂av在线播放| 内射中国少妇高清视频免费视频 | 小视频国产| 精品国产乱码久久久| 久久久久久久久久久人妻| 91成人久久| 日韩免费a级毛片无码a∨| 二对二中文字幕。| 亚洲高清无码免费观看视频| 人妻献身系列第54部| 四虎影视国产精品| 91性高| 婷婷五月色| 亚洲性爱免费电影| 亚洲 暴爽 AV人人爽日日碰| 18禁久极品美女久久哦哟呀!| 亚洲无码99| 国岛片视频| 亚洲麻豆av一区二区| 黄色十八禁| 久久久久久久久九九久孕交| 啪啪啪综合网| 高清成年美女黄网站免费大全 | 亚洲黄色网址| 91女在线观看| 国模吧 一区二区三区| 一级日本牲交大片好爽在线看| 亚洲国产天堂| 天天综合网~91入口| 91亚洲精品青草| 91粉嫩萝控精品福利网站_精品影音先锋国 | 日韩啪啪啪视频| renqi久久久久久久久久久久| 熟女人妇一区二区三区| 思思视频免费看网站| 91丝袜| 久久久精精精| 锕锕好爽 死我在线观看| 久久综合中文国产| 啊啊啊com| 五月婷婷色| 欧美网站免费| 欧美另类综合久久| 日日干天天干夜夜爽| 亚洲色图欧美| 天天操妹子| 久久人爽| 91蜜臀熟女| 涩涩涩综合| 日韩免费中文字幕视频| 97在线免费观看| 七月丁香婷婷| 精品视频一区二区| 超碰97人妻自拍| 激情综合 婷婷五月 红杏| 96AV久久久| 中文一区二区婷婷视频| 中文字幕 一区二区 亚洲无码| 这里只有精品视频| 国产精品一区二区黄片| 国内自拍 日韩激情 99| 日va操| 波多野结衣先锋影音| 国产高清成人mv在线观看| 色色色日本| 99久久久久久亚洲精品不卡| 成人无码在线视频网站| 天天看精品动漫视频一区| 国产一区二区二区按摩精品啪视频| 精品99999| 国产成人亚洲精品无| 极品销魂美女一区二区| 天天澡天天狠天天天做| 日韩肏逼视频| 国产精品久久aV| 看大黄色大片原件| 91深夜夜| 天天干天天狼在线视频| 免费人成?大片在线播放| 激情五月天社区| 丰满人妻一区二区三区免费,| 亚洲国产精品久久久久久久久久| 91人妻爽爽人人做人人澡| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲色图欧美| 午夜福利无毒不卡| 人人澡综合涩| 天综合网| 黄网站黄视频网站进入口| 亚州男人的天堂| 久久九九热| 日日不卡av| 欧美不卡在线一区二区| 蜜乳AV.COM| 国产偷拍自拍在线视频| 99热精品免费| 亚洲图片欧美日韩| 国产又大又粗又长视频在线| 无码操逼天堂| 一二三区精品视频| 日韩中文字幕视频| 亚洲一区二区三区中文字幕| 天天草天天干天天日| 天天影视网综合少妇| 精品国产99| 丝袜美腿校园春色| 97视频播放|