2017-03-20 21 views
0

次のコードは現在動作していますが、Excelを開いた後に破損メッセージを表示せずにXLSX形式で表示します。データ形式のデータを(XLSX)形式のExcelにエクスポート

protected void BTNExportExcel_Click(object sender, EventArgs e) 
{ 
    DataTable dtexp= ExportTrends(); //const 

    try 
    { 
     Response.Clear(); 
     Response.ClearContent();    
     Response.ContentType = "application/vnd.ms-excel"; 
     Response.AddHeader("Content-Disposition", "attachment; filename=Export.xls"); 
     TextWriter tw = new StringWriter(); 
     HtmlTextWriter h = new HtmlTextWriter(tw); 

     string[] images = TXTImages.Text.Split(new string[]{"<img"},StringSplitOptions.None); 

     if (images.Length > 0) 
     { 
      Response.Write(images[0].ToString()); 
      for (int i = 1; i < images.Length; i++) 
      { 
       System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image(); 
       string secondpart = images[i].Substring(images[i].IndexOf(',')+1); 
       img.ImageUrl = LoadImage(images[i].Substring(images[i].IndexOf(',') + 1, secondpart.LastIndexOf('\'')));       
       img.RenderControl(new HtmlTextWriter(Response.Output)); 
       Response.Write("<BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/><BR/>"); 
      }      
     } 
     Response.Write("<BR/>"); 
     ////// Create a dynamic control, populate and render it 
     GridView excel = new GridView(); 
     excel.DataSource = dtexp; 
     excel.DataBind(); 

     excel.RenderControl(new HtmlTextWriter(Response.Output)); 

     Response.Flush(); 
     Response.End(); 

    } 
    catch (Exception ex) 
    { 
     Response.Write(string.Empty); 
     Response.Flush(); 
     Response.End(); 
    } 
} 
+1

次に、実際のXLSXファイルを生成できるライブラリを見つける必要があります。 Googling "C#XLSX library"を試してみましたか? – mason

+0

はい、試しましたが、外部ライブラリを使用しています。私は私のプロジェクトに外部ライブラリを追加したくありません。 – VMS

+0

それはあなたのために厳しいだろう。ご覧のとおり、XLSXは実際にあなた自身のコードで生成する単純なフォーマットではありません。それがライブラリが存在する理由です。だから、あなたは車輪を再開発する必要はありません。外部ライブラリを使用することに対して何がありますか? – mason

答えて

0

Excelへの参照を設定していることを確認してください。次のコードサンプルのようなものが、あなたのために処理されます。

private void button1_Click(object sender, EventArgs e) 
     { 
      //connect with database 
      OleDbConnection connection = new OleDbConnection(); 
      connection.ConnectionString = @"Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=""demo.mdb"";User Id=;Password="; 
      OleDbCommand command = new OleDbCommand(); 
      command.CommandText = "select * from parts where Cost<1000 and ListPrice>500"; 
      DataSet dataSet = new System.Data.DataSet(); 
      OleDbDataAdapter dataAdapter = new OleDbDataAdapter(command.CommandText, connection); 
      dataAdapter.Fill(dataSet); 
      DataTable dt = dataSet.Tables[0]; 
      this.dataGridView1.DataSource = dt; 
      //export specific data to Excel 
      Workbook book = new Workbook(); 
      Worksheet sheet = book.Worksheets[0]; 
      book.Worksheets[0].InsertDataTable(this.dataGridView1.DataSource as DataTable, true, 1, 1); 
      book.SaveToFile("sample.xlsx", ExcelVersion.Version2010); 
      System.Diagnostics.Process.Start("sample.xlsx"); 
     } 
+0

ASP.NETアプリケーションでExcel Interopを使用することは、実際には良い考えではありません。エラーが発生しやすく、マイクロソフトでもサポートされていません。次のリンクを参照してください。[Officeのサーバー側の自動化に関する考慮事項](https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office) – bassfader

関連する問題