Pergunta

Ok, vamos ver se eu posso fazer isso faz sentido.

Eu tenho um programa escrito que analisa um arquivo do Excel e ele funciona muito bem. Eu uso o seguinte para entrar no arquivo:

string FileToConvert = Server.MapPath(".") + "\\App_Data\\CP-ARFJN-FLAG.XLS";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileToConvert + ";Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();
//this next line assumes that the file is in default Excel format with Sheet1 as the first sheet name, adjust accordingly
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [CP-ARFJN-FLAG$]", connection);

e isso funciona muito bem. Mas quando eu tento-o no arquivo real (que é fornecido para mim por outro programa) eu recebo este erro:

System.Data.OleDb.OleDbException: External table is not in the expected format. at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open() at wetglobe.Page_Load(Object sender, EventArgs e)

Mas, isso é onde eu acho que as mentiras de problema. Se eu pegar esse arquivo e salvá-lo com o meu Excel local, primeiro eu recebo este popup:

CP-ARFJN-FLAG.XLS pode conter recursos que não são compatíveis com texto (Tab delimitado). Você quer manter o livro neste formato?

  • Para manter este formato, o que deixa quaisquer características incompatíveis, clique em Sim.
  • Para preservar os recursos, clique em No. Ten guardar uma cópia na última Excel formato.
  • Para ver o que pode ser perdido, clique Ajuda.

Se eu clicar em Não e, em seguida, guardá-lo como o formato atual Excel, o programa irá funcionar bem.

Então, eu estou supondo que este é guardado em algum formato Excel velho louco?

Suponho que minhas perguntas seria:

  • Como posso saber qual a versão do Excel salvo isso?
  • Como posso analisá-lo em sua atual Estado?
  • -ou- Posso programaticamente guardá-lo como uma versão mais recente?

Espero que seja claro ... Obrigado.

Foi útil?

Solução

Parece que o arquivo XLS gerado por seu aplicativo de terceiros podem não ser realmente em formato Excel -. Ele pode realmente ser um arquivo de texto delimitado por tabulações com uma extensão .xls

Tente abri-lo com um editor de texto e ver.

Se é delimitado por tabulações, você pode abandonar o adaptador OleDB e aberto / analisá-lo como um arquivo de texto padrão.

Outras dicas

Se o formato do arquivo gerado é provável que a mudança no futuro (talvez quando você atualizar o aplicativo de terceiros), você pode preferir usar o Office Primary Interop Assemblies . Estes irão carregar qualquer versão ou formato de arquivo produzido pelo Excel. A desvantagem é que você vai precisar Office instalado no servidor.

i resolveu o problema. O arquivo Excel deve ser gerado pelo MS Excel 2003, não do MS Excel 2007 "salvar como 97-2003". então você tem que baixar um arquivo a partir de qualquer fonte. Em seguida, copie os dados manualmente para a folha. ele trabalhou comigo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top