1

エクセルファイルができました。スクリーンショットをアップロードしました。Excel ファイルを解析するには、.NET アプリケーション (コンソール アプリケーション) を作成する必要があります。「関数名」というタイトルのセルが表示されます。私の .NET アプリは、その特定のセルを見つけて、テンプレート、InstanceFromTemplate、タスクなどのその列の内容を読み取る必要があります。Task を読み取る場合は、Task() のような CreateTask 関数を呼び出す必要があります。InstanceFromTemplate を読み取る場合は、TaskInstanceFromTemplate() のような InstanceFromTemplate 関数を呼び出す必要があります。

これらの関数のコードを書きました。Excelシートを解析し、その特定の列に移動し、その列の下にある関数名を含むセルを読み取り、その適切な関数を呼び出す方法についてのみ助けが必要です。どんな助けでも大歓迎です。

アルゴリズムは

  1. エクセルファイルを開く
  2. 関数名というタイトルのヘッダー セルを検索します
  3. ヘッダー セルの下の最初のセルを読み取る
  4. 最初のセルが を読み取る場合、関数を呼び出します (GetAllTemplate 関数のコードは既に存在します) 見つけた後に呼び出すだけです。
  5. 2 番目のセルの場合、関数を呼び出します。
  6. ヘッダー セル Function Name の下の最後のセルに到達しました。それで、終了します
4

5 に答える 5

4

あなたがやろうとしていることの説明に基づいて、LINQ to Ecxelプラグインを実際に使用する必要があります。問題を解決する簡単な方法だと思います

http://code.google.com/p/linqtoexcel/

于 2012-06-15T05:04:24.350 に答える
4

Excel Data Readerなどのライブラリを使用し、マネージ コードでデータを操作することを強くお勧めします。CodePlex サイトには、必要なことを行う良い例があります。

于 2012-06-15T05:05:18.593 に答える
1

ここには、開始するためのチュートリアルがいくつかあります。

http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm

于 2012-06-15T05:05:15.520 に答える
1

今後の参考のための追加メモ。ただ指摘したいのは、相互運用を扱うのは面倒なことです。あなたの最善の策は、ライブラリを使用することです。

于 2015-07-08T10:25:05.563 に答える
0

Excel相互運用機能を使用すると、この方法で実行できます。関数名はExcelブックで定義されている関数を指していると思います。そうでない場合は、リフレクションを使用するようにその部分を変更する必要があります(ただし、この場合、メソッドのレシーバーが必要ですが、1つは表示されません。質問で)。

        object hmissing = System.Reflection.Missing.Value; 

        Xls.Application App = new Xls.ApplicationClass();
        App.Visible = true;
        Xls.Workbook wb = App.Workbooks.Open(@"c:\tmp\cartel1.xls", hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
            hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing);
        Xls.Worksheet ws = (Xls.Worksheet)wb.ActiveSheet;
        Xls.Range rng = ws.UsedRange;
        Xls.Range hdr = rng.Find("Function Name", hmissing, hmissing, hmissing, hmissing, Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext, hmissing, hmissing, hmissing);
        string hdrAdd = hdr.get_Address(hmissing, hmissing, Microsoft.Office.Interop.Excel.XlReferenceStyle.xlA1, hmissing, hmissing);
        string[] pcs = hdrAdd.Split('$');
        string col = pcs[1];
        int row;
        int.TryParse(pcs[2], out row);
        string methName;
        row++;
        while ((methName = App.get_Range(col + row.ToString(), hmissing).get_Value(hmissing) as String) != null)
        {
            App.Run(methName.Split('.')[1], hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
                hmissing, hmissing, hmissing);
            row++;
        }
于 2012-06-15T06:22:31.517 に答える