Ir para conteúdo
Fórum Script Brasil
  • 0

Socorro: Problema Com Conexão


Nabvchodhonozohr

Pergunta

Olá Pessoal!

Estou com um grande problema.

Primeiro: criei um sistema q inclusive acho q postei algo aqui sobre dúvidas nesse sistema. O sistema pega os dados de um dataset e transforma em um arquivo do excel formatado. Funcionou beleza.

Agora tenho q criar o inverso: um sistema q pegue info do arquivo q foi exportado e colocar num dataset.

O problema - recebo o seguinte erro quando tento pelo menos conectar à tabela:

"A tabela externa não está no formato esperado."

Fiz alguns testes e descobri q o erro é na conexão. Tb descobri q se eu copiar os dados da tabela e colar em uma tabela nova funciona, e o arquivo ainda fica menor. Já tentei de tudo antes de exportar. Não há nenhum atributo ou propriedade q esteja impedindo q ele seja aberto, mas pelo excesso de bytes acho q algo a + está sendo escrito fisicamente.

Alguém faz idéia de como eu posso contornar esse problema?

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Você pode colocar aqui um exemplo simples (o mais simples possível) de como você gera o arquivo do Excel com o OWC e de que como você está tentando gerar um dataset a partir dele? Ficaria mais fácil pra gente tentar descobrir o problema.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, então lá vai. Primeiro a exportação:

'Antes eu tenho as declarações e inicializações de variáveis entre elas um obj Spreadsheet do Excel

'iterando por duas drop down lists. esses são os Fors principais
For I_l_i_CountAno = 0 To Me.ddl_ano.Items.Count - 1
  For I_l_i_CountTipo = 1 To Me.ddl_tpdia.Items.Count - 1

    'populando o obj ActiveSheet passando coordenadas tipo x,y(plano cartesiano)
    For each varRow in dsRows.select("query")
      objExcel.ActiveSheet.Cells(X,Y) = Cdbl(varRow.val)
    Next

    'aqui há uma verificação se alguma coisa foi escrita e cálculos de alguns valores
    
    'outro dataset q eu uso pra definir formatações na tabela
    For i=0 to dsFormatRow.length - 1
      'daqui pra baixo tem umas 60 linhas q formatam o objExcel.ActiveSheet, tipo, cor de fundo da célula, fonte...
    Next
  Next
Next

'exportação propriamente dita
objExcel.ActiveSheet.Export("C:\Temp\plan.xls", OWC.SheetExportActionEnum.ssExportActionNone)

Tentei ser o mais preciso possível. Tem quase 200 linhas de código nesse sistema. Tem um exemplo da planilha aqui: Planilha Abaixo eu mostro como eu estou tentando importar essa tabela pra jogar no dataset:
Dim I_l_s_Conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\plan.xls;Extended Properties=Excel 8.0;")
        Dim I_l_o_ExcelCommand As New OleDb.OleDbCommand
        Dim I_l_o_DS_Excel As New DataSet
        Dim I_l_o_DA_Excel As OleDb.OleDbDataAdapter
        Dim objexcel As OWC.Spreadsheet

        I_l_o_ExcelCommand.Connection = I_l_s_Conn
        I_l_o_ExcelCommand.CommandType = CommandType.Text
        I_l_o_ExcelCommand.CommandText = "Select * from [Plan1$]"

        I_l_o_DA_Excel = New OleDb.OleDbDataAdapter(I_l_o_ExcelCommand)
        I_l_o_DA_Excel.Fill(I_l_o_DS_Excel)

Tente importar a planilha q eu passei acima q você vai ver o erro. Depois copie o conteúdo da planilha e cole numa planilha nova. Depois faça o mesmo e vai funcionar.

Valeu.

Graymalkin, vou colocar o código na minha home e te passo por e-mail a url pra você ver. Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Nabvchodhonozohr,

Você fez bem em desconfiar do tamanho do arquivo. Decidi abrir o arquivo que baixei (pelo edit no prompt) e surpresa! Ele é um arquivo XML e não um arquivo do Excel mesmo. Todavia, o Excel abre ele normalmente, por isso a gente nem se liga nisso. Experimente abrir ele aí no Bloco de Notas e você verá. Acredito que ao invés de utilizar o método Export de objExcel.ActiveSheet você deveria procurar por um método chamado SaveAs. Pelo menos é assim que eu gravo um arquivo do Excel (de verdade, não um XML) utilizando automação.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Brigadão cara, mas continuam os problemas!

Eu não posso usar automação, apenas o obj. OWC conforme exigiram aqui. Esse obj não tem um método SaveAs nem algo parecido. Já procurei na classe inteira. Tentei ler direto com um dataset, já q o dataset lê um arquivo xml, só q deu vários erros porque não é xml exatamente q é gerado pelo owc, mas um html com xml, por isso várias tags são desconhecidas e não dá pra ler os dados. Tentei com o próprio obj. excel. Ele leu o arquivo, mas retorna as linhas do código e não as células do xls. Agora eu estou tentando usar um FileStream pra ler esse conteúdo e extrair só o xml, pra depois validá-lo (não sei se é possível) e jogar num dataset pra q eu possa consultar os dados.

Valeu.

Link para o comentário
Compartilhar em outros sites

  • 0

Brigadão cara, mas continuam os problemas!

Eu não posso usar automação, apenas o obj. OWC conforme exigiram aqui. Esse obj não tem um método SaveAs nem algo parecido. Já procurei na classe inteira. Tentei ler direto com um dataset, já q o dataset lê um arquivo xml, só q deu vários erros porque não é xml exatamente q é gerado pelo owc, mas um html com xml, por isso várias tags são desconhecidas e não dá pra ler os dados. Tentei com o próprio obj. excel. Ele leu o arquivo, mas retorna as linhas do código e não as células do xls. Agora eu estou tentando usar um FileStream pra ler esse conteúdo e extrair só o xml, pra depois validá-lo (não sei se é possível) e jogar num dataset pra q eu possa consultar os dados.

Valeu.

Realmente, não tem um método SaveAs no OWC. E, pensando aqui com meus botões, creio que o Web de Office Web Components, logicamente, deve ter uma razão de ser (ou seja, o OWC só deve gravar formatos que são utilizados na web). De qualquer forma, o método Export suporta um terceiro parâmetro, no qual você pode especificar que só deve ser gravado um arquivo XML (e não um HTML+XML). Veja o que fiz:

        Dim arq As String = "c:\teste2.xls"
        Dim x As New OWC11.Spreadsheet()
        x.Range("A1").Value = 2
        x.Range("A2").Value = 3245
        x.Export(arq, OWC11.SheetExportActionEnum.ssExportActionNone, OWC11.SheetExportFormat.ssExportXMLSpreadsheet)

        'Leitura do arquivo gravado acima
        Dim xtr As New Xml.XmlTextReader("c:\teste2.xls")
        xtr.WhitespaceHandling = Xml.WhitespaceHandling.None
        Do
            Debug.WriteLine(xtr.Name & " = " & xtr.Value)
        Loop While xtr.Read()

Repare no SheetExportFormat.ssExportXMLSpreadsheet. É ele que define que deverá ser salvo um arquivo só com XML. E nó código do XmlTextReader eu faço ele ler o XML dado por dado.

Seria muito melhor utilizar o XMLDocument ao invés do XmlTextReader, pois dá pra fazer uma seleção dos dados do XML que devem ser retornados (com o método SelectNodes). O problema é que esse método requer uma string de busca na linguagem XPath (e eu não sei nada de XPath... sad.gif ).

De qualquer forma, acho que já é um começo. Ah propósito, tentei abrir esse arquivo, que agora é realmente só XML, com um OleDbConnection, mas também não funciona.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Boa essa Gray!

Mas há 2 problemas. Primeiro, esse argumento q você falou eu já tinha usado, porém ele só funciona com o OWC10. Até aqui beleza porque eu posso tentar conversar com o meu chefe sobre isso porque nós usamos o OWC9, mas o problema é q eu tenho q gerar um arquivo q possa ser aberto pelo excel e modificado após a exportação, daí o usuário salva ele e importa já modificado para o datagrid q vai ter na mesma interface de exportação, entende? Esse xml gerado é apenas...xml.

Já vi uma coisa, talvez seja impossível fazer assim. Vou tentar por automação como você tinha me dito, se der certo eu posto aqui.

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0

Boa essa Gray!

Mas há 2 problemas. Primeiro, esse argumento q você falou eu já tinha usado, porém ele só funciona com o OWC10. Até aqui beleza porque eu posso tentar conversar com o meu chefe sobre isso porque nós usamos o OWC9, mas o problema é q eu tenho q gerar um arquivo q possa ser aberto pelo excel e modificado após a exportação, daí o usuário salva ele e importa já modificado para o datagrid q vai ter na mesma interface de exportação, entende? Esse xml gerado é apenas...xml.

Ah tá, a formatação (que fazia parte do HTML) é perdida nesse caso, né? Não fiz o teste aqui, mas creio que seja esse o problema, certo?

Já vi uma coisa, talvez seja impossível fazer assim. Vou tentar por automação como você tinha me dito, se der certo eu posto aqui.

Acho que realmente é a melhor alternativa. biggrin.gif Qualquer coisa, 'stamos aí.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...