我已經爲第三方sw編寫了一個插件,該插件將修訂後的文本提取到Excel工作表中,然後在Excel中爲更改後的部分着色。 只要每個文本段(=單元格內容)不超過255個字符,它都可以工作。唉,這可以並偶爾會發生。Excel中的彩色文本部分> 255個字符
爲了識別Excel中已更改的零件,我將它們與<del>
和其他零件包圍在一起。 <add>
用於刪除和添加文本的標籤。然後我色這些部件(以及去除環境標籤)是這樣的:
while (((string)cell1.Text).Contains("<del>"))
{
try
{
var pos = ((string) cell1.Text).IndexOf("<del>") + 1;
var pos2 = ((string) cell1.Text).IndexOf("</del>") + 1;
var txt = cell1.Characters[pos, (pos2-pos) + 9].Text;
txt = txt.Replace("<del>", "").Replace("</del>", "");
cell1.Characters[pos, (pos2-pos) + 9].Text = txt;
cell1.Characters[pos, txt.Length-3].Font.Color = -16776961;
}
catch
{
break;
}
}
我使用的互操作性,因爲我覺得它更容易與工作,而且還因爲我無法找到如何做任何像樣的例子這與OpenXML。但是我知道Excel在單元格文本方面有其侷限性,所以我願意提供建議。
有沒有辦法使用Interop在包含> 255個字符的單元格中對單個單詞進行着色?
如果一切都失敗了,我可能不得不用表格創建一個Word文檔,在那裏進行格式化,然後複製/粘貼到Excel(yukk)。請幫我避免這個醜陋。
P.S:是的,修訂摘要需要基於Excel。
嘗試使用cell.Value而不是cell.Text。至少在EPPlus中,文本是爲用戶顯示的值,而值是單元格的內容。因此,如果列寬小於內容,那麼Text屬性會包含與Value屬性不同的值。 – Magnetron
不行。字符沒有Value屬性。 – LocEngineer
@Magnetron對不起,在那裏有點厚。當然,我可以使用'cell.Value'。雖然沒有任何區別。對於單元格> 255仍然沒有結果。 – LocEngineer