2017-01-18 4 views
1

Не удалось сохранить файл Excel в Exjs на стороне браузера.Как скачать файл Excel в Sencha/Ext JS?

Ниже приведен мой код C#, чтобы предоставить ответ на приложение extJS в виде файла Excel.

Я конвертирую таблицу данных Excel e, используя код C#, а функция exportToExcel() возвращает файл Excel в ответ на запрос внешнего приложения JS.

public void exportToExcel(string userAutoId) 
    { 
     DataTable dt = new DataTable(); 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString); 
     con.Open(); 
     SqlDataAdapter da = new SqlDataAdapter("getContacts", con); 
     da.SelectCommand.CommandType = CommandType.StoredProcedure; 
     da.SelectCommand.Parameters.AddWithValue("@userAutoId", userAutoId); 
     //cmd.Parameters.Add("@retValue", System.Data.SqlDbType.VarChar).Direction = System.Data.ParameterDirection.ReturnValue; 
     da.Fill(dt); 

     //Create a dummy GridView 
     GridView GridView1 = new GridView(); 
     GridView1.AllowPaging = false; 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 

     Response.Clear(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", 
     "attachment;filename=DataTable.xls"); 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.ms-excel"; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 

     for (int i = 0; i < GridView1.Rows.Count; i++) 
     { 
      //Apply text style to each Row 
      GridView1.Rows[i].Attributes.Add("class", "textmode"); 
     } 
     GridView1.RenderControl(hw); 

     //style to format numbers to string 
     string style = @"<style> .textmode { mso-number-format:\@; } </style>"; 
     Response.Write(style); 
     Response.Output.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 
    } 

И это мой Ext JS код

   handler: function() { 
        //me = this; 
        var hfUserAutoId = me.InfoPanel.getForm().findField('hfUserAutoId').getValue(); 

        var form = me.InfoPanel.getForm(); 
        if (form.isValid()) { 
         form.submit({ 
          url: 'getCSV.aspx', 
          method: 'POST', 
          params: { "userAutoId": hfUserAutoId }, 
          waitMsg: 'Downloading your File...', 
          success: function (fp, o) { 

               // Heare I want to do code for download respoce file 

           me.fireEvent('CloseThisEx'); 

          } 
         }); 
        } 
       } 

      } 
+0

Посмотри здесь https://www.sencha.com/forum/showthread. php? 246673-Force-download-file-from-server & p = 902022 & viewfull = 1 # post902022 –

+0

Если у вас есть премиальная лицензия ExtJS, я бы использовал плагин-экспортер, предоставленный ExtJS http://docs.sencha.com/extjs/6.2.0 /classic/Ext.exporter.excel.Xlsx.html, http://examples.sencha.com/extjs/6.2.0/examples/kitchensink/#big-data-grid – pagep

ответ

0

Вы должны использовать возможности браузера для загрузки с помощью window.open. # маршрут C должен иметь метод GET так userAutoId и значение формы должны стать параметрами запроса, то код ExtJS будет:

  handler: function() { 
       var hfUserAutoId = me.InfoPanel.getForm().findField('hfUserAutoId').getValue(), 
        form = me.InfoPanel.getForm(); 

       if (form.isValid()) { 
        var params = Ext.merge(form.getValues(), {userAutoId: hfUserAutoId}); 
        window.open('getCSV.aspx?' + Ext.Object.toQueryString(params), '_blank') 
       } 
      } 

 Смежные вопросы

  • Нет связанных вопросов^_^