Array
(
)

Download arquivo excel com C sharp

Ingrid Valentim
   - 08 jan 2014

Preciso fazer o download de um arquivo excel dentro de url da intranet da empresa onde trabalho já testei diversos códigos diferentes e todos acontecem a mesma coisa: "eu baixo o arquivo porém não consigo abrí-lo", pois a informação que contém dentro do arquivo é a que está abaixo (só consigo abrir com o bloco de notas):
<html>
<head>
<script language="JavaScript1.2">
/**
* Get the virtual directory name (e.g. http://host/"<virtualdir>"/...)
*
* @return String The virtual directory name.
*/
function getVirtualDir()
{
var strUrl = window.location.href;
//Find the third slash (e.g. http://...''''''''/''''''''...)
var nStart = strUrl.indexOf("/");
nStart = strUrl.indexOf("/", nStart + 2) + 1;
//Find the fourth slash (after the virtual dir name)
var nEnd = strUrl.indexOf("/", nStart + 1);
return strUrl.substring(nStart, nEnd);
}
/*
* forward to the erl component
*/
function doForward() {
// get the query parameters
var strArg = "";
var strSearch = window.location.search;
if (strSearch != null && strSearch.length > 0) {
strArg = strSearch + "&";
} else {
strArg = "?";
}
strArg += "ReLoad=" + new Date().getTime();
// forward to the erl component
window.location.replace("/" + getVirtualDir() + "/component/erl" + strArg);
}
</script>
</head>
<body onload="doForward()">
</body>
</html>
Fiz um teste para fazer um download de uma imagem a partir de uma url da internet e também aconteceu a mesma coisa.
Segue abaixo os códigos que já testei:
-- Teste 1:
string url = "http://erilink.ericsson.se/eridoc/erl/objectId/09004cff86eedde6?docno=&action=current&format=excel12book";
WebClient Client = new WebClient();
Client.DownloadFile(url, @"C:\Temp\POs Manual Log.xlsx");
-- Teste 2:
string url = "http://erilink.ericsson.se/eridoc/erl/objectId/09004cff86eedde6?docno=&action=current&format=excel12book";
WebClient Client = new WebClient();
Stream strm = Client.OpenRead(url);
StreamReader sr = new StreamReader(strm);
StreamWriter sw = new StreamWriter(@"C:\temp\POs Manual Log.xlsx");
sw.Write(sr.ReadToEnd());
sw.Close();
strm.Close();
-- Teste 3:
string url = "http://erilink.ericsson.se/eridoc/erl/objectId/09004cff86eedde6?docno=&action=current&format=excel12book";
WebClient Client = new WebClient();
Stream responseStream = Client.OpenRead(url);
byte[] buffer = new byte[2048];
FileStream newFile = new FileStream(@"C:\Temp\POs Manual Log.xlsx", FileMode.Create);
int readCount = responseStream.Read(buffer, 0, buffer.Length);
while (readCount > 0)
{
//Escrever o arquivo
newFile.Write(buffer, 0, readCount);
readCount = responseStream.Read(buffer, 0, buffer.Length);
}
newFile.Close();
responseStream.Close();
Alguém pode me ajudar, por favor?

Henrique Gasparotto
|
MVP
    08 jan 2014

Oi Ingrid, o arquivo .xlsx que tu quer baixar tem esse código HTML dentro dele? Ou te entendi mal?
Se sim, porque esses dados estão no .xlsx e não em um .txt normal? Ou mesmo um .htm?

Ingrid Valentim
   - 09 jan 2014

Oi Henrique, o xlsx que quero baixar contém colunas e linhas com vários registros que vou importar para uma tabela do banco de dados. Esse html que está aí é o que vêm no download quando baixo o arquivo, na verdade não consigo abrir o arquivo que baixei pelo programa excel e sim somente pelo bloco de notas, justamente por conter a informação que apresentei. Pontuando se eu colocar a url no browser eu baixo o arquivo normalmente, via c# vêm isso aí de cima..

Chiodini
   - 09 jan 2014

Ola Ingred.
DEve ter algum problema na fonte do arquivo então.
Pois um arquivo em excel, ter o conteudo dele, como você apresentou é estranho,.

O que acontece quando um arquivo não é interpretado via Excel, é ele ficar com varios caracteres especiais.
mais nao com um codigo dentro dele.

O que pode estar acontecendo é um erro na fonte desse arquivo,
no momento em que você baixa ele para a sua maquina.

tenta entrar no excel,
Abrir ele em modo especial.
e tentar abrir ele no modelo CSV.
que é separado por ;
veja se voce consegue abrir ele dai.

como na figura.
Abrir (Clique na imagem para abrir em uma nova janela)

ATt,
Chiodini

Ingrid Valentim
   - 09 jan 2014

Olá Chiodini!

Conforme expliquei acima, o arquivo não têm problemas, pois se eu fizer o download manualmente via browser ele baixa corretamente, no entanto preciso criar uma aplicação em c# que faça download do arquivo.

Chiodini
   - 09 jan 2014

Entendi,
O teu Teste 1 esta correto, a principio
Mais ta falando a extensao do arquivo.

WebClient webClient = new WebClient();
webClient.DownloadFile("http://localhost/arquivo.txt", @"c:\temp\arquivo.txt");

WebClient webClient = new WebClient();
webClient.DownloadFile("http://localhost/arquivo.xls", @"c:\temp\arquivo.xls");

att
Chiodini

Henrique Gasparotto
|
MVP
    09 jan 2014

Olá Ingrid, é como o colega Leandro comentou. Talvez pelo fato de não haver extensão do arquivo na url ele esteja pegando o referente à página html que contém o arquivo e baixando isso ao invés do arquivo propriamente dito. Tente algo por aí, que acredito que possa dar certo.

Ingrid Valentim
   - 09 jan 2014

Eu já tentei colocar o nome do arquivo, não funciona do mesmo jeito, estou desconfiada que pode ser algum configuração de rede da empresa, vou tentar fazer o download fora da rede de uma imagem qualquer e ver o que acontece...

Chiodini
   - 09 jan 2014

Ingrid

Você pode fazer o teste,
executando o Download do arquivo sem o c#
e veja qual o nome que ele salva,
e compara com a tua string de URL.
Se tiver diferente é o motivo que estamos comentando,
que ele ta salvando o HTML porque o caminho + nome do arquivo
nao traz resultados para o codigo.

Podes estar fazendo esse teste,
para verificar.

att,
Chiodini

Chiodini
   - 09 jan 2014

Outra maneira de ver o nome completo com a URL
é posicionar o teu mouse no botao de download
no rodapé do navegador
vai mostrar toda a string com a url + nome do arquivo + extensão.

att
Chiodini