Ir para o conteúdo
startuga

Erro ao exportar gridview para excel (xlsx)

Mensagens Recomendadas

startuga

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()

Editado por thoga31
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
startuga

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 :/

Editado por startuga

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

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?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
startuga

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PMSF

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...

Editado por PMSF

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
startuga

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

Editado por startuga

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

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/

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.