0

クエリ テーブルを使用できます。

var sheet = (_excel.ActiveSheet as Excel.Worksheet);
var rng = sheet.Range("A1");

var qt = sheet.QueryTables.Add("ODBC;...", rng, "SELECT * FROM myTable");
qt.Refresh();

これにより、データが正しくインポートされます(たとえば、日付は実際には日付として表示されます...)。しかし、ListObject にアクセスして TableStyle を適用しようとすると、例外が発生します。

次に、次のようなリスト オブジェクトを追加するとします。

var sheet = (_excel.ActiveSheet as Excel.Worksheet);

var qt = sheet.ListObjects.Add(
    Excel.Enums.XlListObjectSourceType.xlSrcQuery,
    "ODBC;...",
    null,
    Excel.Enums.XlYesNoGuess.xlNo,
    rng,
    "TableStyleMedium9").QueryTable;

qt.CommandType = Excel.Enums.XlCmdType.xlCmdSql;
qt.CommandText = "SELECT * FROM myTable";
qt.Refresh();

クエリの日付は、日付ではなく 10 進数として表示されます...

後で列をフォーマットすることもできますが、問題は、ユーザーが実行時にこれを入力するときに実行されているクエリが実際にはわからないことです。そのため、Excel でこれを行うことをお勧めします。

基本的に、私が望むのは、コードの最初のビットを使用して、それに TableStyle を適用することです。

誰でも助けることができますか?

4

1 に答える 1

-1

これは色付けを行いませんが、データをデータテーブルに整理します。ブレークポイントを使用してデバッグし、データテーブルがいっぱいになった後にマウスを合わせると、すべてのデータが列に整理されて表示されます。次に、データテーブルでできることは、勝利フォーム要素のデータグリッド ビューにバインドすることです。

私はこれDataTable DataTable = new DataTable();をグローバルフィールドとして上部に持っています。

        OleDbConnection conn = new OleDbConnection();

        //This is making a connection to the excel file, don't worry about this I think you did it differently.
        conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + stringFileName + ";" + "Extended Properties=\"Excel 12.0;HDR=Yes;\"";             OleDbCommand cmd = new OleDbCommand
        ("SELECT * FROM [" + sheetFromTo + "]", conn);

        DataSet dataSet1 = new DataSet();
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmd);

        try
        {
            conn.Open();//opens connection
                dataSet1.Clear();//empties, incase they refill it later
                dataAdapter.SelectCommand = cmd;//calls the cmd up above
                dataAdapter.Fill(dataSet1);//fills the dataset
                dataGridView1.DataSource = dataSet1.Tables[0];//puts the dataset in the dataGridview
                //important** creates a datatable from the dataset, most of our work with the server is with this datatable
                DataTable dataTable = dataSet1.Tables[0];
                DataTable = dataTable;
        }
        catch (Exception ex)
        {
        }
        finally
        {
            conn.Close();
        }
于 2014-05-21T12:24:35.717 に答える