一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

c#如何獲取excel單元格的RGB顏色

 偷心無(wú)痕 2014-10-16

這段時(shí)間一直在做office的工作。前2天獲取單元格的顏色的問(wèn)題一直沒(méi)搞明白。

開(kāi)始我想用的就是Npoi.主要前一部分的工作都是用Npoi完成的

row.GetCell(j).CellStyle.FillBackgroundColorColor 獲取IColor接口。通過(guò)IColor的RGB屬性獲取可是經(jīng)過(guò)大量用例測(cè)試這里獲取的rgb并不準(zhǔn)確只有部分顏色對(duì)的上。

如圖

后來(lái)我甚至問(wèn)了npoi的創(chuàng)始人也沒(méi)有給我一個(gè)明確的回復(fù)。

我自己猜測(cè)因?yàn)閞ow.GetCell(j).CellStyle.FillBackgroundColor 是short類(lèi)型npoi是不是只支持他枚舉的顏色

后來(lái)經(jīng)過(guò)翻閱官網(wǎng)的demo發(fā)現(xiàn)npoi可以通過(guò)rgb設(shè)置顏色

  1. /* ==================================================================== 
  2.    Licensed to the Apache Software Foundation (ASF) under one or more 
  3.    contributor license agreements.  See the NOTICE file distributed with 
  4.    this work for additional information regarding copyright ownership. 
  5.    The ASF licenses this file to You under the Apache License, Version 2.0 
  6.    (the "License"); you may not use this file except in compliance with 
  7.    the License.  You may obtain a copy of the License at 
  8.  
  9.        http://www./licenses/LICENSE-2.0 
  10.  
  11.    Unless required by applicable law or agreed to in writing, software 
  12.    distributed under the License is distributed on an "AS IS" BASIS, 
  13.    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  14.    See the License for the specific language governing permissions and 
  15.    limitations under the License. 
  16. ==================================================================== */  
  17.   
  18. /* ================================================================ 
  19.  * Author: Tony Qu  
  20.  * Author's email: tonyqus (at) gmail.com  
  21.  * NPOI HomePage: http://www./npoi 
  22.  * Contributors: 
  23.  *  
  24.  * ==============================================================*/  
  25.   
  26. using System;  
  27. using System.Collections.Generic;  
  28. using System.Text;  
  29.   
  30. using System.IO;  
  31. using NPOI.HSSF.UserModel;  
  32. using NPOI.HPSF;  
  33. using NPOI.POIFS.FileSystem;  
  34. using NPOI.SS.UserModel;  
  35. using NPOI.HSSF.Util;  
  36.   
  37. namespace CustomColorInXls  
  38. {  
  39.     class Program  
  40.     {  
  41.         static void Main(string[] args)  
  42.         {  
  43.             InitializeWorkbook();  
  44.   
  45.   
  46.             HSSFPalette palette = workbook.GetCustomPalette();  
  47.             palette.SetColorAtIndex(HSSFColor.PINK.index, (byte)255, (byte)1, (byte)222);  
  48.            //HSSFColor  palette.GetColor()  
  49.             //HSSFColor myColor = palette.AddColor((byte)253, (byte)0, (byte)0);  
  50.   
  51.             ISheet sheet1 = workbook.CreateSheet("Sheet1");  
  52.             ICellStyle style1 = workbook.CreateCellStyle();  
  53.             style1.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.PINK.index;  
  54.             style1.FillPattern = FillPatternType.SOLID_FOREGROUND;  
  55.             sheet1.CreateRow(0).CreateCell(0).CellStyle = style1;  
  56.             short c = sheet1.GetRow(0).Cells[0].CellStyle.FillForegroundColor;  
  57.             short []sh = palette.GetColor(c).GetTriplet();  
  58.   
  59.             WriteToFile();  
  60.         }  
  61.   
  62.         static HSSFWorkbook workbook;  
  63.   
  64.         static void WriteToFile()  
  65.         {  
  66.             //Write the stream data of workbook to the root directory  
  67.             FileStream file = new FileStream(@"test.xls", FileMode.Create);  
  68.             workbook.Write(file);  
  69.             file.Close();  
  70.         }  
  71.   
  72.         static void InitializeWorkbook()  
  73.         {  
  74.             workbook = new HSSFWorkbook();  
  75.   
  76.             ////create a entry of DocumentSummaryInformation  
  77.             DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();  
  78.             dsi.Company = "NPOI Team";  
  79.             workbook.DocumentSummaryInformation = dsi;  
  80.   
  81.             ////create a entry of SummaryInformation  
  82.             SummaryInformation si = PropertySetFactory.CreateSummaryInformation();  
  83.             si.Subject = "NPOI SDK Example";  
  84.             workbook.SummaryInformation = si;  
  85.         }  
  86.     }  
  87. }  

而且palettle可以通過(guò)public HSSFColor GetColor(short index);方法將short轉(zhuǎn)化為HSSFColor而通過(guò)HSSFColor類(lèi)的public virtual short[] GetTriplet();方法可以獲取rgb.

但是這里存在2個(gè)問(wèn)題

1.

palette.SetColorAtIndex(HSSFColor.PINK.index, (byte)255, (byte)1, (byte)222);這里是設(shè)置的時(shí)候固定的設(shè)置。而人工操作能否有這種固定的設(shè)置。

2.

支持excel2007的XSSFWorkbook并沒(méi)有GetCustomPalette方法。而通過(guò)反編譯器我也沒(méi)找到能獲取Palette的類(lèi)似的類(lèi)

后通過(guò)官網(wǎng)excel2003和excel2007的demo如下code

2003


2007



npoi to excel2007無(wú)法獲取單元格rgb的顏色 如果顏色不一樣會(huì)向npoi支持的short轉(zhuǎn)化

實(shí)在沒(méi)法了。只有祭出com組件了。

代碼如下:

  1. Microsoft.Office.Interop.Excel.Application application = new Microsoft.Office.Interop.Excel.Application();  
  2. Microsoft.Office.Interop.Excel.Workbook workbook = null;  
  3. Microsoft.Office.Interop.Excel.Worksheet worksheet = null;  
  4. //打開(kāi)文件,n.FullPath是文件路徑    
  5. workbook = application.Application.Workbooks.Open(copyPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);  
  6. Microsoft.Office.Interop.Excel.Range range = null;// 創(chuàng)建一個(gè)空的單元格對(duì)象  
  7. range = worksheet.get_Range(worksheet.Cells[rowNum + 1, ColumnNum + 1], worksheet.Cells[rowNum + 1, ColumnNum + 1]);  
  8. if (range.Value2 != null)  
  9. {  
  10.     string content = range.Value2.ToString();  
  11. }  
  12. string color = range.Interior.Color.ToString();  
  13.  Common com = new Common();  
  14. Color col = com.RGB(int.Parse(color));  
  15. return new byte[3] { col.R, col.G, col.B };  

RGB方法如下:

  1. public Color RGB(int color)  
  2.        {  
  3.            int r = 0xFF & color;  
  4.            int g = 0xFF00 & color;  
  5.            g >>= 8;  
  6.            int b = 0xFF0000 & color;  
  7.            b >>= 16;  
  8.            return Color.FromArgb(r, g, b);  
  9.        }  

string color的這個(gè)color的范圍是整個(gè)顏色的范圍OK問(wèn)題解決??墒莿?dòng)用了com組件,如果大家有更好的辦法歡迎留言。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    国产又粗又猛又大爽又黄同志| 日本久久精品在线观看| 欧美一区二区三区99| 日本高清一区免费不卡| 欧美多人疯狂性战派对| 中文字字幕在线中文乱码二区| 免费观看一级欧美大片| 欧美久久一区二区精品| 欧美日韩国产另类一区二区| 国产欧美日韩不卡在线视频| 黄片在线免费观看全集| 不卡一区二区在线视频| 日韩欧美三级视频在线| 精品国产av一区二区三区不卡蜜 | 在线观看免费视频你懂的| 欧美乱妇日本乱码特黄大片| 日本精品中文字幕人妻| 日韩1区二区三区麻豆| 偷拍偷窥女厕一区二区视频| 色哟哟精品一区二区三区| 日韩精品第一区二区三区| 久久午夜福利精品日韩| 精品国产亚洲免费91| 九九热这里只有精品视频| 色婷婷激情五月天丁香| 欧美中文字幕一区在线| 麻豆看片麻豆免费视频| 在线免费看国产精品黄片| 精品推荐久久久国产av| 97人妻精品免费一区二区| 亚洲免费视频中文字幕在线观看| 日本一级特黄大片国产| 国产真人无遮挡免费视频一区| 国产99久久精品果冻传媒| 国产精品免费视频久久| 亚洲女同一区二区另类| 中文字幕五月婷婷免费| 亚洲综合香蕉在线视频| 国产精品一区二区日韩新区| 亚洲乱码av中文一区二区三区| 亚洲国产一区精品一区二区三区色|