startuga Posted August 27, 2013 at 09:33 AM Report #522725 Posted August 27, 2013 at 09:33 AM (edited) Boas pessoal, tenho este código que está funcional se usar o formato .xls, contudo se quiser alterar para .xlsx ele diz que o ficheiro não pode ser aberto por estar corrompido ou por a extensão não corresponder. A minha pergunta é, Existe alguma maneira de fazer isto em .xlsx sem alterar muito este código base que tenho? GV_VENDOR.Columns.RemoveAt(1) GV_VENDOR.Columns.RemoveAt(0) If GV_VENDOR.Rows.Count.ToString + 1 < 65536 Then GV_VENDOR.AllowPaging = "False" GV_VENDOR.DataBind() Dim tw As System.IO.StringWriter = New System.IO.StringWriter Dim hw As New System.Web.UI.HtmlTextWriter(tw) Dim frm As HtmlForm = New HtmlForm() Response.ContentType = "application/vnd.ms-excel" Response.AddHeader("content-disposition", "attachment;filename=VENDOR" & "_" & Format(Date.Now, "dd/MM/yyyy_HHmm") & ".xls") Response.Charset = "" EnableViewState = False Controls.Add(frm) frm.Controls.Add(GV_VENDOR) frm.RenderControl(hw) Response.Write(tw.ToString()) Response.End() GV_VENDOR.AllowPaging = "True" GV_VENDOR.DataBind() Edited August 27, 2013 at 02:20 PM by thoga31 GeSHi
startuga Posted September 2, 2013 at 12:55 PM Author Report #523172 Posted September 2, 2013 at 12:55 PM Alguma ideia de como isto possa ser feito?
bioshock Posted September 2, 2013 at 06:46 PM Report #523210 Posted September 2, 2013 at 06:46 PM http://filext.com/faq/office_mime_types.php
startuga Posted September 3, 2013 at 07:41 AM Author Report #523250 Posted September 3, 2013 at 07:41 AM (edited) Fiz a alteração das linhas : Response.ContentType = "Application / vnd.openxmlformats - officedocument.spreadsheetml.sheet" Response.AddHeader("content-disposition", "attachment;filename=VENDOR" & "_" & Format(Date.Now, "dd/MM/yyyy_HHmm") & ".xlsx") Mas continua com este erro: http://img593.imageshack.us/img593/4016/lu2d.jpg Eu poderia fazer em XLS apenas mas o caso não me permite porque preciso de exportar muitas das vezes mais de 65 000rows algo que XLS não me permite fazer :/ Edited September 3, 2013 at 04:25 PM by startuga
startuga Posted September 4, 2013 at 01:36 PM Author Report #523432 Posted September 4, 2013 at 01:36 PM Haverá alguma biblioteca free que me faça isso? Encontra na net, mas é tudo pago :x
bioshock Posted September 4, 2013 at 10:35 PM Report #523491 Posted September 4, 2013 at 10:35 PM Quando gravas o ficheiro *.xlsx, ele dá-te esse erro? Se sim, experimenta alterar-lhe o formato, após estar em *.xlsx, para *.xls. Biblioteca para que?
startuga Posted September 5, 2013 at 08:34 AM Author Report #523499 Posted September 5, 2013 at 08:34 AM Sim se tentar gravar em *.xlsx dá-me esse erro, mas se gravar em *.xls dá para executar, contudo o formato *.limita na recepção de grandes grids com mais de 65 000rows.
PMSF Posted September 5, 2013 at 10:37 AM Report #523518 Posted September 5, 2013 at 10:37 AM (edited) bom dia, já confirmaste se tens os drives corretos da versão mais recente do excel... eu costumo no inicio do formulário ou do modulo... onde vou fazer exportação para dados Excel colocar como referencia ao office a seguinte linha Imports Microsoft.Office.Interop comigo tem funcionado, depois é só escolher o tipo de ficheiro a gravar, alterando a extenção do ficheiro... Edited September 5, 2013 at 10:38 AM by PMSF
startuga Posted September 5, 2013 at 10:42 AM Author Report #523521 Posted September 5, 2013 at 10:42 AM (edited) Bom dia, Este é o código que tenho, Imports System.IO Imports Microsoft.Office.Interop Partial Public Class Selection_IMPVEN Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) End Sub Protected Sub export_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_IMPVEN_ExcelReport.Click GV_IMPVEN.Columns.RemoveAt(0) GV_IMPVEN.AllowPaging = "False" GV_IMPVEN.DataBind() Dim tw As System.IO.StringWriter = New System.IO.StringWriter Dim hw As New System.Web.UI.HtmlTextWriter(tw) Dim frm As HtmlForm = New HtmlForm() Response.ContentType = "Application / vnd.openxmlformats - officedocument.spreadsheetml.sheet" Response.AddHeader("content-disposition", "attachment;filename=IMPVEN" & "_" & Format(Date.Now, "dd/MM/yyyy_HHmm") & ".xlsx") Response.Charset = "" EnableViewState = False Controls.Add(frm) frm.Controls.Add(GV_IMPVEN) frm.RenderControl(hw) Response.Write(tw.ToString()) Response.End() GV_IMPVEN.AllowPaging = "True" GV_IMPVEN.DataBind() End Sub End Class Já com a referência adicionada e com a extensão alterada ele faz o mesmo :x Edited September 5, 2013 at 10:43 AM by startuga
bioshock Posted September 5, 2013 at 07:40 PM Report #523556 Posted September 5, 2013 at 07:40 PM Podes sempre guardar o conteúdo num objecto e depois do objecto enviar para o excel.
startuga Posted September 6, 2013 at 07:25 AM Author Report #523588 Posted September 6, 2013 at 07:25 AM Como assim?
bioshock Posted September 6, 2013 at 07:58 PM Report #523717 Posted September 6, 2013 at 07:58 PM O conteúdo que vem pelo http, envia-o para um Dataset (objecto), depois envia o conteúdo do dataset para o excel. http://stuffpinho.com/excel-with-csharp/
startuga Posted September 8, 2013 at 10:35 PM Author Report #523864 Posted September 8, 2013 at 10:35 PM Obrigado, vou tentar utilizar esse procedimento, se tivere dúvidas deixo aqui, depois 🙂
startuga Posted September 9, 2013 at 08:24 AM Author Report #523881 Posted September 9, 2013 at 08:24 AM O conteúdo que vem pelo http, envia-o para um Dataset (objecto), depois envia o conteúdo do dataset para o excel. http://stuffpinho.com/excel-with-csharp/ (Desculpa o incómodo :/) O código está todo em C# não tens em VBNET? *i'm so damn noob*
startuga Posted September 10, 2013 at 03:38 PM Author Report #524002 Posted September 10, 2013 at 03:38 PM Não estou a conseguir implementar esse código em aplicação web :x
bioshock Posted September 10, 2013 at 06:46 PM Report #524025 Posted September 10, 2013 at 06:46 PM Bem, o objectivo era dar-te uma ideia de como poderias fazer. Nunca trabalhei com ASP, pelo que não te consigo ser grande ajuda nesse campo. No entanto, para converteres, podes utilizar ferramentas online. Deves ter em atenção, que esse artigo tem outro relacionado (nomeadamente uma classe)..daí poderes não perceber algumas coisas. O código, portanto, que deves ter em atenção é: Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();; Microsoft.Office.Interop.Excel.Range excelRange; // excelApp.Cells[line, column] = value excelApp.Cells[2 + i, 1] = dS.Tables[0].Rows[i].ItemArray[0].ToString(); excelApp.Visible = true; http://www.developerfusion.com/tools/convert/csharp-to-vb/
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now