2016-09-22 70 views
1

我試圖出口從數據表中的數據到Excel,但是當我打開Excel中我得到了連接錯誤:數據從C#導出到Excel

enter image description here

而且下面是我的代碼用於導出數據。

StreamWriter wr = new StreamWriter(@"C:\\Docs_Harshit\\file.xls"); 

for (int i = 0; i < dtFeeForm.Columns.Count; i++) 
{ 
    wr.Write(dtFeeForm.Columns[i].ToString().ToUpper() + "\t"); 
} 

wr.WriteLine(); 

for (int i = 0; i < (dtFeeForm.Rows.Count); i++) 
{ 
    for (int j = 0; j < dtFeeForm.Columns.Count; j++) 
    { 
     if (dtFeeForm.Rows[i][j] != null) 
     { 
      wr.Write(Convert.ToString(dtFeeForm.Rows[i][j]) + "\t"); 
     } 
     else 
     { 
      wr.Write("\t"); 
     } 
    }      
    wr.WriteLine(); 
}     
wr.Close(); 
+0

請參閱http://stackoverflow.com/questions/151005/create-excel-xls-and-xlsx-file-from-c-sharp?rq=1 –

回答

1
private void ExportToExl(bool firstTime) 
     { 
      //string path = string.Empty;    
      //Delete the file if it exists. 
      if (firstTime && File.Exists(savingFileName)) 
       File.Delete(savingFileName); 

      if (firstTime) 
      { 
       //This is the first time of creating the excel file and the first sheet. 
       // Create a spreadsheet document by supplying the filepath. 
       // By default, AutoSave = true, Editable = true, and Type = xlsx. 
       SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument. 
        Create(savingFileName, SpreadsheetDocumentType.Workbook); 

       // Add a WorkbookPart to the document. 
       WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); 
       workbookpart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); 

       // Add a WorksheetPart to the WorkbookPart. 
       var worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); 
       var sheetData = new SheetData(); 
       worksheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(sheetData); 
       var bold1 = new System.Windows.Documents.Bold(); 
       DocumentFormat.OpenXml.Spreadsheet.CellFormat cf = new DocumentFormat.OpenXml.Spreadsheet.CellFormat(); 

       // Add Sheets to the Workbook. 
       DocumentFormat.OpenXml.Spreadsheet.Sheets sheets; 
       sheets = spreadsheetDocument.WorkbookPart.Workbook. 
        AppendChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>(new DocumentFormat.OpenXml.Spreadsheet.Sheets()); 

       // Append a new worksheet and associate it with the workbook. 
       var sheet = new Sheet() 
       { 
        Id = spreadsheetDocument.WorkbookPart. 
         GetIdOfPart(worksheetPart), 
        SheetId = sheetId, 
        Name = "Sheet" + sheetId 
       }; 
       sheets.Append(sheet); 

       //Add Header Row. 
       var headerRow = new Row(); 
       foreach (DataColumn column in ResultsData.Columns) 
       { 
        var cell = new Cell { DataType = CellValues.String, CellValue = new CellValue(column.ColumnName) }; 
        headerRow.AppendChild(cell); 
       } 
       sheetData.AppendChild(headerRow); 

       foreach (DataRow row in ResultsData.Rows) 
       { 
        var newRow = new Row(); 
        foreach (DataColumn col in ResultsData.Columns) 
        { 
         var cell = new Cell 
         { 
          DataType = CellValues.String, 
          CellValue = new CellValue(row[col].ToString()) 
         }; 
         newRow.AppendChild(cell); 
        } 
        sheetData.AppendChild(newRow); 
       }    
       workbookpart.Workbook.Save(); 
       spreadsheetDocument.Close(); 
      } 
    } 

數據表是ResultsData

+0

您可以使用此代碼導出到Excel或任何格式.. .xlxs,.csv,.xlx –

0

您不使用任何練成組件寫入Excel文件中的問題。 如果可以使用,然後嘗試這個,否則對你的問題的意見將是有益的:

public void CreateExcelFile() 
{ 
    //Get the data from database into datatable 
    string cmdQry = "dbo.GET_Report"; 
    SqlCommand cmd = new SqlCommand(cmdQry); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("@bySource", SqlDbType.VarChar).Value = "CLIENT".ToUpper(); 
    DataTable dtExcel = GetData(cmd); 

    //Clears all content output from the buffer stream. 
    Response.ClearContent(); 
    Response.Clear(); 
    //Adds HTTP header to the output stream 
    Response.AddHeader("content-disposition", string.Format("attachment; filename=try.xls")); 

    // Gets or sets the HTTP MIME type of the output stream 
    Response.ContentType = "application/vnd.ms-excel"; 
    string space = ""; 

    foreach (DataColumn dcolumn in dtExcel.Columns) 
    { 
     Response.Write(space + dcolumn.ColumnName); 
     space = "\t"; 
    } 
    Response.Write("\n"); 
    int countcolumn; 
    foreach (DataRow dr in dtExcel.Rows) 
    { 
     space = ""; 
     for (countcolumn = 0; countcolumn < dtExcel.Columns.Count; countcolumn++) 
     { 
      Response.Write(space + dr[countcolumn].ToString()); 
      space = "\t"; 
     } 
     Response.Write("\n"); 
    } 
    Response.Flush(); 
    Response.End(); 
} 

private DataTable GetData(SqlCommand cmd) 
    { 
     SqlConnection con = new SqlConnection(Bussiness.GetConnectionString("Default")); 
     cmd.Connection = con; 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataTable dt = new DataTable(); 

     try 
     { 
      con.Open(); 
      da.Fill(dt); 
      return dt; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      con.Close(); 
      da.Dispose(); 
      con.Dispose(); 
     } 
    } 
+0

我在響應對象處得到錯誤,它是「名稱'響應'在當前上下文中不存在」。我正在使用System.Web.UI的命名空間 – Harshit

+0

使用System.Web.UI; – Sak

+0

我希望你在web應用程序中開發它。 System.Web應該可以工作。嘗試System.Web.HttpContext.Current.Response以及。 – Sak

0

我爲出口找到一個簡單的方法。我只是使用CSV文件進行數據導出並使用編碼UTF32。這有助於數據導出,而且任務輕鬆完成。