1

C#(SSIS ScriptTask)で生成されたExcelにDatatableを保存しようとしています。

以下は私のコードです:

        OleDbDataAdapter A = new OleDbDataAdapter();
        System.Data.DataTable dt = new System.Data.DataTable();
        A.Fill(dt, Dts.Variables["User::ObjResultSet"].Value);


         Excel.Application oXL = new Excel.ApplicationClass();
        Excel.Workbooks oWBs = oXL.Workbooks;
        Excel.Workbook oWB = null;
        Excel.Worksheet oSheet;

        oWB = oWBs.Count > 0 ? oWB = oWBs[0] : oWBs.Add(System.Reflection.Missing.Value);



        oXL.DisplayAlerts = false;

        oWB = oXL.Workbooks.Add(Missing.Value);

        oSheet = (Excel.Worksheet)oWB.Worksheets[1];

        int rowCount = 1;
        foreach (DataRow dr in dt.Rows)
        {
            rowCount += 1;
            for (int i = 1; i < dt.Columns.Count + 1; i++)
            {
                // Add the header time first only
                if (rowCount == 2)
                {
                    oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
                }
                oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
            }
        }

        oWB.SaveAs(Dts.Variables["User::ExcelPath"].Value, Excel.XlFileFormat.xlWorkbookNormal,
            Missing.Value, Missing.Value, Missing.Value, Missing.Value,
            Excel.XlSaveAsAccessMode.xlExclusive,
            Missing.Value, Missing.Value, Missing.Value,
            Missing.Value, Missing.Value);
        oWB.Close(false, Dts.Variables["User::ExcelPath"].Value, Missing.Value);
        oWBs.Close();
        oXL.Quit();


        Dts.TaskResult = (int)ScriptResults.Success;

私が直面している問題は、Excel が生成されることです。しかし、生成しようとすると.xls、完全に正常に動作します。しかし、生成しようとすると、これは機能しません.xlsx

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

4

2 に答える 2

2

Excel.XlFileFormat.xlOpenXMLWorkbookの代わりに使用してみてくださいExcel.XlFileFormat.xlWorkbookNormal

[更新しました]

oWB.SaveAs(Dts.Variables["User::ExcelPath"].Value, Excel.XlFileFormat.xlOpenXMLWorkbook, Missing.Value, Missing.Value, Missing.Value, Missing.Value,Excel.XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value,Missing.Value, Missing.Value);
于 2017-06-20T19:10:04.410 に答える