解決方案出處:http://hi.baidu.com/%CB%E6%B7%E7%C6%AE1989/blog/item/48af7da07063c0914610645a.html
工具:http://files.cnblogs.com/yelaiju/vs2010CopyToWord.rar
現在安裝SP1也可以修復這個bug
代碼
try
{
// 取得剪貼板的內容:
IDataObject dataObject = Clipboard.GetDataObject();
// 確定粘貼的數據是否與指定的格式關聯
if (dataObject.GetDataPresent(DataFormats.Rtf))
{ // 獲取RTF數據
string rtf = dataObject.GetData(DataFormats.Rtf) as string;
// 以Regex.Replace去掉多余的字符(不管是否有,一律強制去除)
string fixedRtf = Regex.Replace(rtf, @" \\uinput2(?<uc>\\u-?\d*)\s.. ", (m) => { return m.Groups[ " uc "].Value + " ? "; });
// 另外新建一個DataObject對象
DataObject newDataObject = new DataObject();
// RTF格式用修改后的字符串,其余的還原
foreach ( string t in dataObject.GetFormats())
newDataObject.SetData(t, t == " Rich Text Format " ? fixedRtf : dataObject.GetData(t));
// 將修改后的內容寫入剪貼板
Clipboard.SetDataObject(newDataObject, true);
}
}
catch (Exception ex)
{ MessageBox.Show(ex.ToString()); }
{
// 取得剪貼板的內容:
IDataObject dataObject = Clipboard.GetDataObject();
// 確定粘貼的數據是否與指定的格式關聯
if (dataObject.GetDataPresent(DataFormats.Rtf))
{ // 獲取RTF數據
string rtf = dataObject.GetData(DataFormats.Rtf) as string;
// 以Regex.Replace去掉多余的字符(不管是否有,一律強制去除)
string fixedRtf = Regex.Replace(rtf, @" \\uinput2(?<uc>\\u-?\d*)\s.. ", (m) => { return m.Groups[ " uc "].Value + " ? "; });
// 另外新建一個DataObject對象
DataObject newDataObject = new DataObject();
// RTF格式用修改后的字符串,其余的還原
foreach ( string t in dataObject.GetFormats())
newDataObject.SetData(t, t == " Rich Text Format " ? fixedRtf : dataObject.GetData(t));
// 將修改后的內容寫入剪貼板
Clipboard.SetDataObject(newDataObject, true);
}
}
catch (Exception ex)
{ MessageBox.Show(ex.ToString()); }