我正在尝试阅读文字格式,例如Strikethough酒店通过
myworksheet.Cells[row, col].DisplayFormat.Style.Font.Strikethrough;
但是,无论实际格式是什么,结果总是错误的。
在此之前,我使用以下方法读取同一单元格的值:
myworksheet.Cells[row, col].Value;
获得正确的价值。
当我尝试使用调试器来阅读myworksheet.Cells[row, col].DisplayFormat.Style.Font.Strikethrough
时,我收到了错误。
当我尝试使用调试器读取格式Font
并查看其属性时,我得到:
异常详情:
Strikethrough {System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Runtime.InteropServices.COMException: Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))
--- End of inner exception stack trace ---
at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at System.Dynamic.IDispatchComObject.GetMembers(IEnumerable`1 names)} System.Reflection.TargetInvocationException
我在Windows 7 SP1 x64操作系统上安装了Office 2010 x86,并且我从.NET 4.0项目引用了Microsoft.Office.Interop.Excel版本14。
我使用相同的库以编程方式创建了.xlsx文件,并通过Excel的UI手动添加了文本格式。
通过调试器(监视和立即)访问引发的异常提示库版本可能已过期,但版本14似乎是正确的版本(http://www.microsoft.com/en-us/download/details.aspx?id=3508)。
我错过了什么?
答案 0 :(得分:2)
找到原因和解决方案......
显然,格式是每个字符,而不是每个单元格。
检查是否有任何具有删除线格式的单元格有效:
for (int ch = 1; ch <= cell.Characters.Count; ch++)
{
if (cell.Characters[ch, 1].Font.Strikethrough)
{
hasStrikeThrough = true;
break;
}
}
但是,这只能用于单元格的值是一个字符串(如果值为bool,则不起作用)。 - 仅适用于字符串,我的意思是对于其他格式,我得到一个例外。
答案 1 :(得分:1)
在VBA中,您通常只需直接调用Cells(r,c).Font
,而不使用Style。