Excel “Tabela externa não está no formato esperado.”
-
16-09-2019 - |
Pergunta
Eu estou tentando ler um arquivo do Excel (xlsx), utilizando o código mostrado abaixo. Recebo uma "tabela externa não está no formato esperado." erro a menos que eu tenho o arquivo já está aberto no Excel. Em outras palavras, eu tenho que abrir o arquivo em Excel primeiro antes que eu possa ler se do meu programa C #. O arquivo xlsx estiver em um compartilhamento em nossa rede. Como posso ler o arquivo sem ter que abri-la primeiro? Graças
string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
DataSet ds = new DataSet();
adaptor.Fill(ds);
}
Solução
"Tabela externa não está no formato esperado." normalmente ocorre ao tentar usar um arquivo do Excel 2007 com uma seqüência de conexão que usa: Microsoft.Jet.OLEDB.4.0 e Extensão Propriedades = Excel 8.0
Usando a seguinte seqüência de conexão parece resolver a maioria dos problemas.
public static string path = @"C:\src\RedirectApplication\RedirectApplication\301s.xlsx";
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
Outras dicas
Obrigado por este código :) Eu realmente aprecio isso. Funciona para mim.
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
Então, se você tem diff versão do arquivo do Excel, obter o nome do arquivo, se a sua extensão é .xlsx , use o seguinte:
Private Const connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
e se é .xls , use:
Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" + path + ";Extended Properties=""Excel 8.0;HDR=YES;"""
(eu tenho muito baixa reputação ao comentário, mas este é o comentário sobre a entrada da JoshCaba, usando o Ace-motor em vez de Jet para o Excel 2007)
Se você não tem Ace instalado / registado na sua máquina, você pode obtê-lo em: https://www.microsoft.com/en-US/download/details.aspx?id=13255
Aplica-se para Excel 2010 também.
Basta adicionar o meu caso. Meu arquivo xls foi criado por uma função de exportação de dados a partir de um site, a extensão do arquivo é xls, ele pode ser normalmente aberto por MS Excel 2003. Mas ambos Microsoft.Jet.OLEDB.4.0 e Microsoft.ACE.OLEDB.12.0 tem um " tabela externa não está na exceção prevista formato".
Finalmente, o problema é que, assim como a exceção, disse, "não é no formato esperado". Embora seu nome extensão é xls, mas quando eu abri-lo com um editor de texto, é na verdade um arquivo html bem formada, todos os dados estão em um
é um célula. Então eu acho que eu posso analisá-lo de uma forma html.
Eu tive esse mesmo problema (Usando o ACE.OLEDB) eo que resolveu isso para mim foi este link: http://support.microsoft.com/kb/2459087 A essência do que é que a instalação de várias versões de escritórios e diversos escritórios SDK, montagens, etc. levou à referência ACEOleDB.dll na apontar Registro para a pasta em vez de Office14 OFFICE12 na
A partir do link:
Também já vi esse erro ao tentar usar complexos indireta () fórmulas na folha que está sendo importado. Notei isso porque essa era a única diferença entre duas pastas de trabalho onde se importava eo outro não. Ambos eram 2007+ arquivos .xlsx, eo motor 12.0 foi instalado. I confirmou esta foi a questão por:
eo erro desapareceu. Eu estava recebendo erros com terceiros e Oledb leitura de um livro XLSX. A questão parece ser uma planilha oculto que provoca um erro. Reexibir a planilha ativado o livro para importação. Eu tive esse problema e alterar as propriedades estendidas para HTML Import fixa-lo como por este post por Marcus Miris: Em vez de OleDb, você poderia usar o Interop Excel e abra a planilha como somente leitura. correu para o mesmo problema e encontrou esta discussão. Nenhuma das sugestões acima ajudaram exceto para @ o comentário de Smith para a resposta aceita em 17 de abril '13. O fundo da minha questão é perto o suficiente para o @ zhiyazw - basicamente tentando definir um arquivo do Excel exportados (SSRS no meu caso) como fonte de dados no pacote dtsx. Tudo o que fiz, depois de alguns ajustes ao redor, foi mudar o nome da planilha. Ele não tem que estar em letras minúsculas como @Smith sugeriu. Suponho ACE OLEDB espera que o arquivo Excel para seguir uma certa estrutura XML mas de alguma forma Reporting Services não está ciente disso. Este endereço de arquivo do Excel pode ter uma extensão incorreta. Você pode alterar a extensão de xls para xlsx ou vice-versa e tente novamente. Se o arquivo é somente leitura, basta removê-lo e ele deve funcionar novamente. O arquivo pode ser bloqueado por outro processo, você precisa copiá-lo, em seguida, carregá-lo como diz este pós Isso também pode ser um arquivo que contém imagens ou gráficos, ver o seguinte: http://kb.tableausoftware.com/articles/knowledgebase/resolving-error-external-table-is-not-in-expected-format A recomendação é para salvar o Excel 2003 Basta adicionar a minha solução para esta questão. Eu estava carregando um arquivo .xlsx para o servidor web, em seguida, ler a partir dele e em massa inserir para SQL Server. Estava ficando esta mesma mensagem de erro, tentou todas as respostas sugeridas, mas nenhum funcionou. Eventualmente eu salvou o arquivo como Excel 97-2003 (.xls) que trabalhou ... único problema que tenho agora é que o arquivo original tinha 110,000+ linhas. Se você ainda tiver este problema, em seguida, verifique as suas permissões, eu tentei muitas destas sugestões e meu problema concreto foi que o arquivo que eu queria processo estava sob controle de origem e o fio não tinha permissões, eu tive que mudar o inteiros permissões de pasta e começou a trabalhar (eu estava processando muitos arquivos em lá) ... ele também corresponde muitas sugestões, como a mudança do nome do arquivo ou verifique se o arquivo não é loicked por outro processo. Eu espero que o ajude. ACE tem substituído JETAce Suporta todas as versões anteriores do Office Este código funciona bem! Isso pode ocorrer quando o livro é protegido por senha. Há algumas soluções alternativas para remover essa proteção, mas a maioria dos exemplos que você vai encontrar on-line estão desatualizados. De qualquer maneira, a solução mais simples é para desproteger a pasta de trabalho manualmente, caso contrário, usar algo como OpenXML para remover a proteção de programação. Recentemente, vi esse erro em um contexto que não encontrou nenhum das respostas listadas anteriormente. Ele acabou por ser um conflito com AutoVer . Solução:. Desativar temporariamente AutoVer Eu tive recentemente esta "System.Data.OleDb.OleDbException (0x80004005): Tabela externa não está no formato esperado." de erro ocorrer. Eu estava contando com o Microsoft Access 2010 Runtime. Antes da atualização que foi instalado automaticamente no meu servidor em 12 de dezembro de 2018 meu código C # funcionou muito bem usando o provedor Microsoft.ACE.OLEDB.12.0. Após a atualização a partir de 12 de dezembro de 2018 foi instalado comecei a obter a “Tabela externa não está no formato esperado" no meu arquivo de log. I abandonou o Runtime Microsoft Access 2010 e instalado o Microsoft Access 2013 Runtime e meu código C # começou a trabalhar novamente com não "System.Data.OleDb.OleDbException (0x80004005): Tabela externa não está no formato esperado." erros. 2013 versão que fixa esse erro para mim https://www.microsoft.com/en-us/ download / confirmation.aspx? id = 39358 2010 versão que funcionou para mim antes da atualização que foi instalado automaticamente no meu servidor em 12 de dezembro. https://www.microsoft.com/en-us/ download / confirmation.aspx? id = 10910 https://www.microsoft.com/en-us/ download / confirmation.aspx? id = 10910 Eu também tive esse erro ocorrer no mês passado em um processo automatizado. A C # correu código bem quando eu corri depuração. Descobri que a conta de serviço que executa o código de permissões também necessários para a C:. Pasta Temp \ Windows \ Meu escopo consiste em baixar modelo e verifica o modelo quando ela está cheia de dados Então, 1) Baixar um modelo (.xlsx) arquivo com a linha de cabeçalho. o arquivo é gerado usando OpenXML e está funcionando perfeitamente. 2) Carregar o mesmo arquivo sem qualquer alteração do seu estado descarregado. Isso fará com que um erro de conexão e falha (conexão OLEDB está usando para ler a folha de excel). Aqui, se os dados são preenchidos o programa funciona como esperado. Qualquer pessoa ter uma idéia a questão está relacionada com o arquivo que estamos criando é em xml formato se abri-lo e apenas salvar convertê-lo no formato Excel e funciona bem. Qualquer idéia para fazer o download do excel com o tipo de arquivo preferido? Trabalho com algum código antigo e me deparei com essa mesma exceção genérica. Muito difícil de rastrear o problema, então eu pensei que eu ia acrescentar aqui no caso de ajuda de outra pessoa. No meu caso, houve código em outras partes do projeto que estava abrindo um StreamReader no arquivo Excel antes o OleDbConnection tentou abrir o arquivo (isso foi feito em uma classe base). Então, basicamente, eu só precisava chamar Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
|