2

これらのファイルの作成に使用したバージョンの Excel で .xls、.xlsx、および .xlsm を起動するアプリケーションを作成しようとしています。その理由は、さまざまなバージョンの Excel で異なる動作をする多数の VBA スクリプトが含まれているためです (Microsoft のおかげです!)。そのようなファイルの作成に使用されたバージョンを特定する方法を探しています。

Excel を遅延バインドしてプロパティを読み取ろうとしましCalculationVersionたが、ファイルの編集に使用された最後のバージョンしか表示されません。.xlsx 内の app.xml のバージョン番号も同じです。また、ファイルを編集して保存した後、ファイルのバイナリのマーカーが変更されているようですが、これらすべてのマーカーが変更されるかどうかはわかりません。

ファイルを作成したバージョンを示すマーカーまたはプロパティを知っている人はいますか?

.xls のみで動作するのか、.xlsx のみで動作するのかについてもお答えください。これで少しは目標に近づけます。

編集:計算バージョンを取得するには:

  private string CalculationVersion()

    {   //Variablen

        string version = String.Empty;

        object Object_Excel_Application = null;

        object Object_WorkBooks = null;

        object Object_WorkBook = null;

        object[] Parameters;

        Type Type_of_Programm;



        //Typ der Excel.Application bestimmen

        Type_of_Programm = Type.GetTypeFromProgID("Excel.Application");



        //Eine Excel instanz erstellen und in Object_Excel_Application speichern

        Object_Excel_Application = Activator.CreateInstance(Type_of_Programm);



        try //Versuche

        {

            //Excel unsichtbar machen

            Parameters = new Object[1];

            Parameters[0] = 0;

            Object_Excel_Application.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, Object_Excel_Application, Parameters);



            //Interaktion mit dem User unterbinden

            Parameters = new Object[1];

            Parameters[0] = 0;

            Object_Excel_Application.GetType().InvokeMember("Interactive", BindingFlags.SetProperty, null, Object_Excel_Application, Parameters);



            //Workbooks erstellen

            Object_WorkBooks = Object_Excel_Application.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, Object_Excel_Application, null);



            //Die angegebene Datei öffnen

            Parameters = new Object[15];

            Parameters[0] = dateiPfad;

            for(int i = 1; i <= 13; i++)

            {

                Parameters[i] = Missing.Value;

            }

            Parameters[14] = true;

            Object_WorkBook = Object_WorkBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, Object_WorkBooks, Parameters);



            //Letzte Calculations Version auslesen

            version = Object_WorkBook.GetType().InvokeMember("CalculationVersion", BindingFlags.GetProperty, null, Object_WorkBook, null).ToString();

            MessageBox.Show(version);



            //Wieder schließen

            //Workbook zumachen

            Parameters = new Object[3];

            Parameters[0] = true;

            Parameters[1] = Missing.Value;

            Parameters[2] = Missing.Value;

            Object_WorkBook.GetType().InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, Object_WorkBook, Parameters);



            //Excel schließen

            Object_Excel_Application.GetType().InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, Object_Excel_Application, null);



            //Version in gekürtzter Form zurückgeben

            return version_long_to_version_short(version); //Die Hauptversionsnummer zurückgeben

        }//-try

        catch (Exception e) //bei Fehler

        {

            MessageBox.Show("Error: " + e.Message, "Error"); //Fehler anzeigen

            return String.Empty; //Leeren String zurückgeben

        }//-catch

        finally //Schlussendlich

        {

            //Die objecte wieder freigeben

            Object_freigeben(Object_WorkBook);

            Object_freigeben(Object_WorkBooks);

            Object_freigeben(Object_Excel_Application);

        }//-finally

    }//-CalculationVersion

今、私はExcel 97ファイルがこれを保存していないように見えるという問題を修正しようとしているので、ファイルのbofがExcel 97(出力8)または他のバージョンであることを教えてくれるかどうかを判断するために使用されるこのC ++があります(出力 0)。計画はこれを実行することであり、それが私に与えられた場合0は を取得します。それ以外の場合は、CalculationVersionその Excel 97がエラー-1であることがわかっています。これが機能する場合の次のステップは、可能であれば C++ を C# に「変換」し、プログラムに統合することです。-2-3

ドイツ語のコメントで申し訳ありませんが、私の英語はあまり上手ではありません。

4

0 に答える 0