我想列出在Word文檔中使用的所有字體顏色,將它們顯示爲彩色的ListViewItems。解析Word文檔中使用的顏色,用作ListViewItem的背景色 - 錯誤的顏色
我可以解析文檔並獲取所有獨特的字體顏色。
什麼不行? - 以正確的顏色獲取ListViewItems。 Grey35顯示爲黃色,綠色爲深綠色。
下面是該
var maxnum = doc.Words.Count;
var ind = 0;
foreach (Word.Range wd in doc.Content.Words)
{
if (!string.IsNullOrEmpty(wd.Text.Trim('\r', '\n', ' ')))
{
ind++;
bkwParseColors.ReportProgress(100*ind/maxnum, wd.Font.Color);
}
}
我有源代碼段和這裏就是我用它做:
private void bkwParseColors_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
var color = (Word.WdColor)e.UserState;
var drin = lstColors.FindItemWithText(color.GetHashCode().ToString());
if(drin==null)
{
var li = new ListViewItem(color.GetHashCode().ToString());
li.BackColor = ColorTranslator.FromOle((int) color);
lstColors.Items.Add(li);
}
}
唉,而不是灰色的,我得到黃色,而不是Word的綠色,我得到一個黑色,全綠色,而不是淺灰色,我得到一個黑暗的50%灰色(至少非常黑暗)。唯一正確的顏色是黑色。
在調試過程中,我還發現第一個灰色,在ListView中轉換爲黃色,被列爲wdWhite。 : - ?
它幾乎看起來像我只獲得「全綵」與一些價值(亮度)失蹤。 有人能告訴我如何獲得正確的顏色?
使用Word 2010,VS社區2013,框架4.0。
編輯:我似乎越來越接近!
==>根據我是否使用點擊文本顏色時直接出現的「主題顏色」,或者是否單擊「更多顏色」,然後從色輪中選取一個,我的行爲是否有所不同?如果我從色輪着色文本,我似乎獲得了正確的值,包括灰色。如果我使用首先出現的默認調色板中的灰色,則將灰色表示爲「白色,背景1,較深的xx%」,這將解釋wdWhite。
不幸的是,這意味着文檔已經包含彩色文本,並且着色不在我的控制之下。所以我需要一種將「主題顏色」包含進去的方法。
EDIT2:看起來好像在回答我的問題就出在這裏:Office 2007 [and higher] interop: retrieve RGB-color 或者基本上在頁面鏈接有:http://www.wordarticles.com/Articles/Colours/2007.php#UIConsiderations
我會努力自己通過這個希望是越來越正確的顏色值從主題顏色。
嘗試:Font.TextColor.RGB –
@CindyMeister無差異存在。不適用於主題顏色。而我發現的VBA代碼是一個很難篩選的問題。 – LocEngineer
有趣的是,對我來說,它挑選了「色輪」和主題顏色...無論如何,很高興你找到了解決方案,它看起來不錯:-) –