• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

André Parreira

incompativel no excel

33 mensagens neste tópico

Boas a todos

Eu estou a fazer um programa, onde consigo mexer nas celulas de excel a partir de uma daragrid, no vb.net.

mas agora so aceita o sheet1, plant ou folha1, so posso abrir a folha de excel da folha 1, este codigo.

Dim da As New OleDbDataAdapter("SELECT * FROM [Folha1$]", conexao_Excel)

se aparecer como sheet1, vai logo dar erro, como fasso para poder ser kualkuer 1 deles??

Obrigado pla ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dim da As New OleDbDataAdapter("SELECT * FROM [Folha1$],[sheet1$],[Plan1$]", conexao_Excel)

n tnh a certexa... tenta!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

testei, nao deu

Obrigado

Mas acho que já resolvi esse problema, já consigo criar tudo como ( Folha1) mas agora, aparece sempre, " nao esta no formato esperado) a folha de excel, mas esta tudo como antes.

 Dim dt As New DataTable
        Dim conexao_Excel As String = "Provider=Microsoft.Jet.OleDb.4.0;data source=" & direto & ";Extended Properties=Excel 8.0;"
        Dim da As New OleDbDataAdapter("SELECT * FROM [Folha1$]", conexao_Excel)

        da.Fill(dt)

direto= variavel

Nao consigo abrir 2 vezes a mesma folha excel, na 2º diz que o formato não está o espero, mas quando abro a folha excel está na mesma.

pode ter haver quando a versao do xml, que se vê a versao no excel2007 do xml, ou qual é? eu estou a usar no programa a 1.0.

Depois quando gravo o datagrid quando as alteraçoes que quiser, abro a folha excel, já la estão as alteraçoes, se eu voltar a gravar quando 97-2003, depois já posso voltar a abrir no datagrid, se nao o fizer, diz que o formato nao é o espera.

Nao estou a ver onde esta o problema.

Obrigado

EDIT: Corrigido texto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vê estas soluções:

http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_21563285.html

Atenção: não estás a escrever num telemóvel. Lê as regras do fórum:

2) Procedimentos e recomendações na criação de tópicos:

  • 2.2) O tópico deve conter o menor número de erros ortográficos possível. Tópicos com 'k' e 'x' não são agradáveis para a leitura dos utilizadores, muito menos sendo esta uma comunidade nacional.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Peço desculpa sobre os erros, vou ter mais atenção a partir de agora.

em relaçao ao link, vou analisar, obrigado pela ajuda

André Parreira

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Agradeço pelo site, mas ele não me ajudou muito, continuo com o mesmo erro( não consigo explicar muito bem qual é e entendo que assim fique difícil de tentar ajudar)

Quando eu fasso a actualização da folha excel a partir do datagrid que é com este código.

Dim fs As New IO.StreamWriter(direto, False)
        fs.WriteLine("<?xml version=""1.0""?>")
        fs.WriteLine("<?mso-application progid=""Excel.Folha""?>")
        fs.WriteLine("<ss:Workbook xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet"">")
        fs.WriteLine("    <ss:Styles>")
        fs.WriteLine("        <ss:Style ss:ID=""1"">")
        fs.WriteLine("           <ss:Font ss:Bold=""1""/>")
        fs.WriteLine("        </ss:Style>")
        fs.WriteLine("    </ss:Styles>")
        fs.WriteLine("    <ss:Worksheet ss:Name=""Folha1"">")
        fs.WriteLine("        <ss:Table>")
        For x As Integer = 0 To dgexcel.Columns.Count - 1
            fs.WriteLine("            <ss:Column ss:Width=""{0}""/>", dgexcel.Columns.Item(x).Width)
        Next
        'fs.WriteLine("            <ss:Row ss:StyleID=""1"">")
        For i As Integer = 0 To dgexcel.Columns.Count - 1
            fs.WriteLine("                <ss:Cell>")
            fs.WriteLine(String.Format("                   <ss:Data ss:Type=""String"">{0}</ss:Data>", dgexcel.Columns.Item(i).HeaderText))
            fs.WriteLine("                </ss:Cell>")
        Next
        fs.WriteLine("            </ss:Row>")
        For intRow As Integer = 0 To dgexcel.RowCount - 2
            fs.WriteLine(String.Format("            <ss:Row ss:Height =""{0}"">", dgexcel.Rows(intRow).Height))
            For intCol As Integer = 0 To dgexcel.Columns.Count - 1
                fs.WriteLine("                <ss:Cell>")
                fs.WriteLine(String.Format("                   <ss:Data ss:Type=""String"">{0}</ss:Data>", dgexcel.Item(intCol, intRow).Value.ToString))
                fs.WriteLine("                </ss:Cell>")
            Next
            fs.WriteLine("            </ss:Row>")
        Next
        fs.WriteLine("        </ss:Table>")
        fs.WriteLine("    </ss:Worksheet>")
        fs.WriteLine("</ss:Workbook>")
        fs.Close()

Acho que é ai que ele esta a fazer alguma alteração na folha excel, porque ele depois quando tento abrir no datagrid, ele diz que o formato não é o esperado.

Obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas pessoa

(desculpem insistir mas já falta mesmo muito pouco para dar o programa estar acabado)

Tenho esta duvida( e espero ter sido a ultima neste projecto)

Eu quando a partir do datagrid, guardo numa folha  excel alguns dados, depois quando vou voltar a abrir a mesma  folha excel pelo datagrid, ele diz que o formato já não é o esperado.

Acho que tem haver com o código acima, mas não sei bem.

Alguém tem alguma sugestão??

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Abre, e grava as mudanças que fiz pelo datagrid, tudo certo.

mas depois quando vou querer abrir a mesma folha pelo datagrid ja nao da.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que eu estou a perguntar e se depois das mudanças feitas pela datagrid continuas a conseguir abrir com o excel?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Supostamente quando gravas tens de apontar o caminho certo? :P ve por ai a estensão

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A extensão é a mesma quando vou buscar a primeira vez, se consigo importar 1 vez, tambem devia conseguir a 2º vez, a extensão nao muda, esta la tambem guardado como xls.

Penso que  esta no codigo que meti acima onde possa estar o erro, porque é com esse codigo que consigo gravar, e so quando gravo é que não consigo depois voltar a abrir pelo datagrid

Obrigado por tentar ajudar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Criei esta função e está a gravar e a abrir vezes sem conta :P

Public Sub ExportToExcel(ByVal dg As DataGrid, ByVal pth As String)

        Dim excel As Object = CreateObject("Excel.Application")
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
        Dim MyDT As System.Data.DataTable = CType(dg.DataSource, DataTable)
        Dim wb As Microsoft.Office.Interop.Excel.Workbook = excel.Workbooks.Add
        Dim ws As Microsoft.Office.Interop.Excel.Worksheet = wb.Worksheets(1)
        For c As Integer = 0 To MyDT.Columns.Count - 1
            ws.Cells(1, c + 1).Value = MyDT.Columns(c).Caption
        Next
        For r As Integer = 0 To MyDT.Rows.Count - 1
            For i As Integer = 0 To MyDT.Columns.Count - 1
                ws.Cells(r + 2, i + 1).Value = CStr(MyDT.Rows(r).Item(i))
            Next
        Next
        wb.SaveAs(pth)
        ws = Nothing
        wb = Nothing
        excel.Quit()
        excel = Nothing

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Testei o código que meteste, mas acho que me esta a dar um erro meio basco de resolver.

Copiei o código todo, mas não estou a perceber uma coisa.

Para que serve o pth.

e esse código e para aplicar no botão gravar, como é num botão não tenho que mete

Public Sub ExportToExcel(ByVal dg As DataGrid, ByVal pth As String)[glow=red,2,300] Handles btgravar.click[/glow]

Obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol claro que nao podes dizer que isso e um evento do butao porque o evento butao tem como parametro de entrada um object e um eventargs :) dentro do evento do butao e que vais chamar essa função :( do tipo

Private Sub BtnGravar_Click(Byval sender as System.Object, Byval e as System.EventArgs) Handles btnGravar.Click

ExportToExcel(TuaDataGrid, CaminhoParaGravar)

End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Da erro qaundo meto o nome da minha datagrid

Value of type 'System.Windows.Forms.DataGridView' cannot be converted to 'System.Windows.Forms.DataGrid'.

Podias explicar resumidamente esse codigo...

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entao mas tens datagrid ou datagridview? ...

Public Sub ExportToExcel(ByVal dg As DataGridView, ByVal pth As String)

        Dim excel As Object = CreateObject("Excel.Application")
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
        Dim MyDT As System.Data.DataTable = CType(dg.DataSource, DataTable)
        Dim wb As Microsoft.Office.Interop.Excel.Workbook = excel.Workbooks.Add
        Dim ws As Microsoft.Office.Interop.Excel.Worksheet = wb.Worksheets(1)
        For c As Integer = 0 To MyDT.Columns.Count - 1
            ws.Cells(1, c + 1).Value = MyDT.Columns(c).Caption
        Next
        For r As Integer = 0 To MyDT.Rows.Count - 1
            For i As Integer = 0 To MyDT.Columns.Count - 1
                ws.Cells(r + 2, i + 1).Value = CStr(MyDT.Rows(r).Item(i))
            Next
        Next
        wb.SaveAs(pth)
        ws = Nothing
        wb = Nothing
        excel.Quit()
        excel = Nothing

    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

datagridview, ja alterei, obrigado pela ajuda

Podes explicar o codigo resumidademnte??

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Preenche um datatable com a infrmação da tua datagridview e depois precorre a datatable e vou preenchendo o excel coluna a coluna começando pelos cabeçalhos...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hum ok obrigado pela explicação.

Ao aleterar para datagridview as Columns e as Rows diz que não e membro do datagridview.

Deve de haver outra alternativa a columns e rows que de para datagridview, mas não sei qual é.

Obrigado pela ajuda

0

Partilhar esta mensagem


Link 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