2

私はテキスト形式を読み込もうとしています。たとえば、Strikethoughプロパティを介して

myworksheet.Cells[row, col].DisplayFormat.Style.Font.Strikethrough;

ただし、実際のフォーマットに関係なく、結果は常にfalseです。

その直前に、次を使用して同じセルの値を読み取りました。

myworksheet.Cells[row, col].Value;

そして、正しい値を取得します。

デバッガーを使用して読み取ろうとすると、myworksheet.Cells[row, col].DisplayFormat.Style.Font.Strikethroughfalseが表示されます。

デバッガーを使用してフォーマットを読み取り、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 SP1x64OSにOffice2010x86をインストールしていて、.NET4.0プロジェクトからMicrosoft.Office.Interop.Excelバージョン14を参照しています。

同じライブラリを使用してプログラムで.xlsxファイルを作成し、ExcelのUIを使用してテキストの書式を手動で追加しました。

デバッガー(監視および即時)を介したアクセスによってスローされた例外は、ライブラリのバージョンが古くなっている可能性があることを示唆していますが、バージョン14は正しいバージョンのようです(http://www.microsoft.com/en-us/download /details.aspx?id=3508)。

私は何が欠けていますか?

4

2 に答える 2

2

原因と解決策を見つけました...

どうやら、フォーマットはセルごとではなく、文字ごとです。

代わりに、取り消し線の書式設定が機能するセルがあるかどうかを確認します。

for (int ch = 1; ch <= cell.Characters.Count; ch++)
{
    if (cell.Characters[ch, 1].Font.Strikethrough)
    {
        hasStrikeThrough = true;
        break;
     }
}

ただし、これはセルの値が文字列である場合にのみ機能します(たとえば、値がブール値の場合は機能しません)。-文字列に対してのみ機能するということは、他の形式では例外が発生することを意味します。

于 2012-07-25T12:30:30.710 に答える
1

VBAでは、通常Cells(r,c).Font、スタイルを使用せずに直接呼び出すだけです。

于 2012-07-25T16:57:52.497 に答える