1

以下のコードを使用して、作成されたファイルである xlsx ファイルにデータをエクスポートしていますが、ファイルを開こうとすると、ファイル形式またはファイル拡張子が有効でないため、Excel でファイルを開くことができないというエラー メッセージが表示されます。

私のPCにインストールされているExcelのバージョンは2010です

    string fileName = "Exported" + DateTime.Now.ToString("dd-MM-yyyy hh-mm-ss") + ".xlsx";
    string filePath = ConfigurationSettings.AppSettings["Export"].ToString() + fileName;

    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;HDR=YES;\"";
    OleDbConnection con = new System.Data.OleDb.OleDbConnection(connectionString);
    using (System.Data.OleDb.OleDbConnection objConn = new
    System.Data.OleDb.OleDbConnection(connectionString))
    using (System.Data.OleDb.OleDbCommand cmd = new
    System.Data.OleDb.OleDbCommand("", objConn))
    {
        objConn.Open();
        cmd.CommandText = "CREATE TABLE [Sheet1] (";
        String valueNames = "(";
        Boolean first = true;
        foreach (DataColumn dc in dsDebitOrder.BAR_DEBIT_ORDER.Columns)
        {
            if (!first)
            {
                cmd.CommandText += ",\r\n";
                valueNames += ", ";
            }
            cmd.CommandText += (dc.ColumnName == "REASON" ? "[" + dc.ColumnName + "] NOTE" : "[" + dc.ColumnName + "] NVARCHAR(100)");
            valueNames += " [" + dc.ColumnName + "]";
            first = false;
        }
        cmd.CommandText += ")";
        valueNames += ")";
        cmd.ExecuteNonQuery();
        char[] trim = { '\'', '"' };
        foreach (DataRow dr in dsDebitOrder.BAR_DEBIT_ORDER.Rows)
        {
            String values = "(";
            first = true;
            foreach (DataColumn dc in dsDebitOrder.BAR_DEBIT_ORDER.Columns)
            {
                if (!first)
                    values += ", ";
                values += "\"" + (Regex.Replace(dr[dc].ToString().Trim(trim), "\"", "") == "-1" ? string.Empty : Regex.Replace(dr[dc].ToString().Trim(trim), "\"", "")) + "\"";
                first = false;
            }
            values += ")";
            cmd.CommandText = "INSERT INTO [Sheet1] " +
            valueNames + " VALUES " + values;
            cmd.ExecuteNonQuery();
        }
        if (con != null)
        {
            con.Close();
            con.Dispose();
        }
    }
    System.IO.FileInfo fi = new System.IO.FileInfo(filePath);
    String sFileLength = fi.Length.ToString();
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    HttpContext.Current.Response.Charset = "";
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
    HttpContext.Current.Response.AddHeader("Content-Length", sFileLength);
    HttpContext.Current.Response.TransmitFile(filePath);
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.Close();
4

0 に答える 0