0

xml スプレッドシート (*.xls) を生成するサード パーティ ツールがあります。このスプレッドシートを読み取って処理する別のプログラムがあります。生成された xml スプレッドシートの内容は 5 列のテーブルで、私のプログラムはそれらに対して選択クエリを実行します。生成されたスプレッドシートへの接続を開くときに問題に直面しています。「{"外部テーブルが予期された形式ではありません。"}」と表示されます。私の Connectin 文字列は "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFileName + ";Extended Properties=\"Excel 8.0;HDR=YES;\""; です。この文字列を変更する必要はありますか? データセットを使用して dataSet.ReadXml(excelFileName); を呼び出してみました。しかし、データセットには私のテーブルが含まれていません。xml スプレッドシートの読み方に関する情報はありますか?

お時間をいただきありがとうございます、CS

4

2 に答える 2

1

接続文字列が古いバイナリ形式の Excel ファイル用に設定されているようです。XML には別の接続文字列が必要です。新しい Excel 2007 xml ファイルについて話している場合は、次の接続文字列が必要です。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";

Excel 2003 に含まれていた古い xml 形式について話しているのであれば、接続文字列があるかどうかはわかりません。その場合、最善の策は、Excel で開いてから xls ファイルとして保存し、最初に使用していた接続文字列を使用することです。

ちなみに、ConnectionStrings.comは、あらゆる種類のデータにアクセスするために必要な古い接続文字列を見つけるのに最適な場所です。

また、他の人が指摘しているように、それがxmlファイルの場合、ファイル拡張子はxlsではなく、.xmlまたは.xlsxのいずれかである必要があることに注意してください。

于 2009-05-21T08:56:26.610 に答える
0
               Excel.Workbook wb1;

            Excel.Application wb2 = new Excel.Application();

            wb2.DisplayAlerts = false;
                           wb1 = (Excel.Workbook)wb2.Workbooks._Open(filename);

            if (wb1.FileFormat == Excel.XlFileFormat.xlXMLSpreadsheet)
            {
                                    wb1.SaveAs(filename, Excel.XlFileFormat.xlExcel12, Type.Missing, Type.Missing,
                        false, false, Excel.XlSaveAsAccessMode.xlNoChange,
                       Excel.XlSaveConflictResolution.xlOtherSessionChanges, false);
            }
            else
            {
                wb2.Workbooks.Close();

            }

Excel スプレッドシートを 2007 形式に変換し、LinQ を使用して、オープン ソース プロバイダーまたは OleDB を使用してシートをクエリできます。

于 2010-07-09T15:15:08.947 に答える