.net winfrom 獲取上傳的Excel文件 單元格的背景色

需求:根據Excel某行標注了黃色高亮顏色,說明該行數據已被用戶選中(Excel文件中并沒有“已選中”這一列,純粹用顏色表示),導入數據到數據庫時標注此行已選中

直接上代碼:

//選擇Excel文件private void btnBrowse_Click(object sender, EventArgs e){using (OpenFileDialog openFileDialog = new OpenFileDialog()){//openFileDialog.InitialDirectory = "c:\\";openFileDialog.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm";openFileDialog.Title = "Select an Excel File";if (openFileDialog.ShowDialog() == DialogResult.OK){txtFilePath.Text = openFileDialog.FileName;}}}//上傳Excel文件(判斷單元格背景色)
private DataTable ReadExcelToDataTable(string filePath)
{DataTable dataTable = new DataTable();ExcelPackage.LicenseContext = LicenseContext.NonCommercial;using (ExcelPackage package = new ExcelPackage(new System.IO.FileInfo(filePath))){// 獲取第一個工作表ExcelWorksheet worksheet = package.Workbook.Worksheets[0];// 獲取最大列數和行數int rowCount = worksheet.Dimension.Rows;int columnCount = worksheet.Dimension.Columns;// 創建列for (int col = 1; col <= columnCount; col++){string columnName = worksheet.Cells[1, col].Value?.ToString() ?? $"Column{col}";dataTable.Columns.Add(columnName);}// 添加數據行(從第2行開始,第1行是標題)for (int row = 2; row <= rowCount; row++){DataRow dataRow = dataTable.NewRow();for (int col = 1; col <= columnCount; col++){var cell = worksheet.Cells[row, col];if ((col - 1) == 0)//第一列{var BackgroundColor = cell.Style.Fill.BackgroundColor.LookupColor();//單元格背景顏色:#FFFFFF00黃色;#FFFFFF白色 if (!string.IsNullOrWhiteSpace(BackgroundColor)){dataRow[col - 1] = BackgroundColor;//獲取單元格背景顏色}else{dataRow[col - 1] = "#FFFFFF";//純白色}}else//第二列.....N列,Excel數據列{dataRow[col - 1] = worksheet.Cells[row, col].Value?.ToString() ?? "";//數據}}dataTable.Rows.Add(dataRow);}}return dataTable;
}//處理Excel的數據(節選)
private void btnImport_Click(object sender, EventArgs e)
{if (!string.IsNullOrWhiteSpace(txtFilePath.Text) && File.Exists(txtFilePath.Text)){System.Data.DataTable dt = ReadExcelToDataTable(txtFilePath.Text);//讀取excelif (dt != null && dt.Rows.Count > 0)//有數據{for (int i = 0; i < dt.Rows.Count; i++){//...略...if (dt.Rows[i][0]?.ToString() == "#FFFFFF00")//判斷顏色代碼,黃色{u.Winningbidder = dt.Rows[i][6]?.ToString();//添加選中行數據}else{u.Winningbidder = null;//不添加數據}u.WinningbidderColor = dt.Rows[i][0]?.ToString();//保存顏色代碼//...略...}//...略...}//...略...}
}//根據條件替換整行背景顏色 
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{if (e.RowIndex > -1){string WinningbidderColor = this.dataGridView1.Rows[e.RowIndex].Cells["WinningbidderColor"].Value.ToString();//背景色代碼 string ID = this.dataGridView1.Rows[e.RowIndex].Cells["ID"].Value.ToString();if (WinningbidderColor == "#FFFFFF00"){this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = ConvertToColor(WinningbidderColor);//整行顏色}else if (ID == "")//合計{this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = ConvertToColor("Red");//整行顏色this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = ConvertToColor("#FFFFFF");//字體顏色}else{this.dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = ConvertToColor("#FFFFFF");//#FFFFFF 白色}}
}// 通用方法:支持 "#RGB", "#RRGGBB", "#ARGB", "#AARRGGBB", "Red" 等格式 public static System.Drawing.Color ConvertToColor(string colorCode){if (string.IsNullOrEmpty(colorCode))return System.Drawing.Color.Empty;// 處理 HTML 格式if (colorCode.StartsWith("#")){try{return System.Drawing.ColorTranslator.FromHtml(colorCode);}catch{// 忽略異常,繼續嘗試其他格式}}// 處理 RGB 整數格式(如 "255,0,0")if (colorCode.Contains(",")){var parts = colorCode.Split(',');if (parts.Length == 3){return System.Drawing.Color.FromArgb(int.Parse(parts[0]),int.Parse(parts[1]),int.Parse(parts[2]));}else if (parts.Length == 4){return System.Drawing.Color.FromArgb(int.Parse(parts[0]),int.Parse(parts[1]),int.Parse(parts[2]),int.Parse(parts[3]));}}// 處理顏色名稱或其他格式return System.Drawing.Color.FromName(colorCode);}

核心代碼:

var BackgroundColor = cell.Style.Fill.BackgroundColor.LookupColor();//返回單元格背景色


圖例:

Excel導入前

Excel導入后

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89115.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenAI GPT-4o技術詳解:全能多模態模型的架構革新與生態影響

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; ?? 一、核心定義與發布背景 官方定位 GPT-4o&#xff08;“o”代表“…

? 構建真正的高性能即時通訊服務:基于 Netty 集群的架構設計與實現

引子 在前面的文章中&#xff0c;我們基于 Netty 構建了一套單體架構的即時通訊服務。雖然單體架構在開發初期簡單高效&#xff0c;但隨著用戶量的增長和業務規模的擴大&#xff0c;其局限性逐漸顯現。當面對高并發場景時&#xff0c;單體 Netty 服務很容易觸及性能天花板&…

原來時間序列挖掘這么簡單

先搞懂&#xff1a;啥是時間序列&#xff1f;簡單說&#xff0c;時間序列就是按時間順序記下來的數據。比如&#xff1a;你每天早上 8 點測的體重&#xff0c;連起來就是 “體重時間序列”&#xff1b;超市每天的銷售額&#xff0c;連起來就是 “銷售時間序列”&#xff1b;城市…

基于Python的豆瓣圖書數據分析與可視化系統【自動采集、海量數據集、多維度分析、機器學習】

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目介紹每文一語有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主 項目介紹 豆瓣圖書數據智能分析系統是一個集數據采集、清洗、分析與可視化于一體的綜合性項…

2.3 數組與字符串

學習目標&#xff1a; 理解數組和字符串的概念&#xff08;存儲多個數據的“盒子”&#xff09;。掌握數組的聲明、初始化和遍歷方法。能用字符串處理簡單文本問題&#xff08;如字符計數、回文判斷&#xff09;。1 一維數組 基本概念 比喻&#xff1a; 數組就像“儲物柜”&…

C# 網口demo

bool _testStatus false; private void btnOpsStart_Click(object sender, EventArgs e) {int delay Convert.ToInt32(txtdelay.Text.Trim());txtView.Clear();txtView.AppendText("******************************************開始烤機*******************************…

MATLAB 安裝 ACADO 的完整步驟

? MATLAB 安裝 ACADO 的完整步驟 &#x1f4e6; 一、準備工作 1. 下載 ACADO Toolkit 官方地址&#xff1a;https://github.com/acado/acado 2. 解壓 ACADO 到你指定的路徑&#xff0c;例如&#xff1a; D:\user\acado-master建議路徑中 不要包含中文或空格。 &#x1f9f…

[逆向工程]160個CrackMe入門實戰之Afkayas.1.Exe解析(二)

[逆向工程]160個CrackMe入門實戰之Afkayas.1.Exe解析&#xff08;二&#xff09; 一、前言 在逆向工程的學習路徑上&#xff0c;CrackMe程序是初學者最好的練手材料。今天我們要分析的是160個CrackMe系列的第二題——Afkayas.1.Exe。這個程序由Afkayas編寫&#xff0c;難度為★…

本地電腦安裝Dify|內網穿透到公網

1.安裝Docker Docker: Accelerated Container Application Development 2.添加 PATH 3.安裝Dify https://github.com/langgenius/dify.git 把.env.example文件名改為.env 4.更換鏡像源 {"builder": {"gc": {"defaultKeepStorage": "20G…

數據結構自學Day6 棧與隊列

1. 棧其實棧與隊列仍然屬于線性表&#xff08;有n個元素構成的集合&#xff0c;邏輯結構呈現線形&#xff09;線形表&#xff1a;順序表&#xff0c;鏈表&#xff0c;棧&#xff0c;隊列&#xff0c;串&#xff08;字符串&#xff09;棧&#xff08;Stack&#xff09;是一種線性…

Java 異常處理詳解:從基礎語法到最佳實踐,打造健壯的 Java 應用

作為一名 Java 開發工程師&#xff0c;你一定遇到過運行時錯誤、空指針異常、文件找不到等問題。Java 提供了強大的異常處理機制&#xff0c;幫助我們優雅地捕獲和處理這些錯誤。本文將帶你全面掌握&#xff1a;Java 異常體系結構try-catch-finally 的使用throw 與 throws 的區…

Fiddler弱網測試實戰指南

Fiddler是一個常用的網絡抓包工具&#xff0c;它也可以用來模擬弱網環境進行測試。 在測試時需要用到弱網測試&#xff0c;也就是在信號差、網絡慢的情況下進行測試。比如&#xff0c;用戶在地鐵、電梯、地下車庫等場景經常會遇到會話中斷、超時等情況&#xff0c;這種就屬于弱…

解決Vue頁面黑底紅字遮罩層報錯:Unknown promise rejection reason (webpack-internal)

vue前端頁面彈出黑底紅色報錯遮罩層報錯&#xff1a;具體報錯信息&#xff1a;Uncaught runtime errors: ERROR Unknown promise rejection reasonat handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58)at eval (webpack-internal…

構建 Go 可執行文件鏡像 | 探索輕量級 Docker 基礎鏡像(我應該選擇哪個 Docker 鏡像?)

文章目錄構建 Go 可執行文件鏡像典型用途探索輕量級 Docker 基礎鏡像構建 Go 可執行文件鏡像 golang:1.23.0-bullseye 是官方 Go 鏡像的一個 “build-stage” 版,用來構建 Go 可執行文件&#xff0c;而不是把它當成最終運行鏡像。 dockerhub官方&#xff1a;https://hub.dock…

鏈表算法之【回文鏈表】

目錄 LeetCode-234題 LeetCode-234題 給定一個單鏈表的頭節點head&#xff0c;判斷該鏈表是否為回文鏈表&#xff0c;是返回true&#xff0c;否則返回false class Solution {/*** 這里的解題思路為&#xff1a;* (1)、找中間節點* (2)、反轉鏈表* (3)、遍歷比較節點值是否相…

Playwright Python 教程:網頁自動化

1. 常用工具簡介及對比主流網頁自動化工具對比工具支持語言瀏覽器支持特點適用場景PlaywrightPython, JS, .NETChromium, Firefox, WebKit跨瀏覽器、速度快、API簡潔自動化測試、爬蟲、網頁操作Selenium多語言所有主流瀏覽器歷史悠久、社區大傳統自動化測試、兼容性測試Puppete…

動態數組:ArrayList的實現原理

動態數組&#xff1a;ArrayList的實現原理 大家好&#xff01;今天我們來聊聊Java集合框架中一個非常重要的數據結構——ArrayList。就像我們日常生活中使用的伸縮收納盒一樣&#xff0c;ArrayList可以根據需要自動調整大小&#xff0c;既方便又高效。那么它是如何實現這種&quo…

MIPI DSI(五) DBI 和 DPI 格式

關于 DBI 和 DPI 這兩種格式的詳細協議內容&#xff0c;請參考《MIPI Alliance Standard for Display Bus Interface&#xff08;V2.0&#xff09; .pdf》和《MIPI Alliance Standard for Display Pixel Interface&#xff08;DPI- 2&#xff09; .pdf》這兩份文檔。首先先了解…

FRP Ubuntu 服務端 + MacOS 客戶端配置

一、服務端配置 1、下載frp并解壓 # 創建目錄并進入 mkdir -p /opt/frp && cd /opt/frp # 下載最新版&#xff08;替換URL為GitHub發布頁最新版本&#xff09; wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz # 解壓 …

Video Python(Pyav)解碼二

在 PyAV 中&#xff0c;input_container.decode() 和 input_container.demux() 是兩種處理視頻流數據的不同方法&#xff0c;它們分別適用于不同的場景。下面通過代碼示例和對比來詳細說明它們的用法和區別。1. input_container.decode()功能直接解碼&#xff1a;從容器中讀取數…