none
Descargar archivo xlsx que se genera desde un combobox c#

    Pregunta

  • Hola desarrolladores, he estado realizando unas aplicaciones de consola que seran tareas programadas y me han funcionado bastante bien, ahora estoy detenido en una descarga en especifico que a diferencia de las otras descargas que realicé el archivo el cual estoy descargando con WebClient.DownloadFile esta listo en el servidor con su extension correspondiente (.Zip) pero el que estoy descargando o tratando de descargar ahora se selecciona una empresa especifica del combobox de la página a la cual le quiero descargar el archivo y de ahi hace una consulta en la BBDD y recien me genera el archivo que el pc me pide guardar (no hay un link directo del archivo con su respectiva extension .xlsx) como puedo realizar esta descarga? acá esta el código. el cual ,me descarga un excel pero no es el archivo ya que no se descarga completo y a la vez no con su peso correspondiente. Alguna idea de como hacerlo si no tengo acceso al link del archivo directamente si no que se genera cuando selecciono algo determinado de la lista?-

    using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml; using System.IO.Compression; namespace MedidasPrmt { class Program { /// <summary> /// Programa para descargar archivos y subirlos a una carpeta común en ETL /// </summary> /// <param name="args"></param> static void Main(string[] args) { String format = "yyyy/MM/dd"; // formato de fecha Año mes dia incluyendo los 0 para buscar por fecha específica CultureInfo chile = new CultureInfo("es-CL"); string nuevoDocTrans = ""; string nuevoDocSts = ""; string nuevoDocColbun = ""; string nuevoDocAjte = ""; string nuevoDocEletrans = ""; string nuevoDocAes = ""; DateTime dt = (DateTime.Now); dt.ToShortDateString(); String fecha = dt.ToString(format); var mes = fecha.ToString().Substring(5, 2);//substring de la mes int dias = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); try { string transelec = "https://medidas.coordinador.cl/index.php/medidas-prmte/?reports%5Bid_internal_empresa%5D=5a42cf0f0dcec2bd06d6e50b&reports%5Bid_internal_subestacion%5D=all&reports%5Bid_internal_tension%5D=all&reports%5Bid_internal_pano%5D=all&reports%5Bid_internal_punto_medida%5D=all&months=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "%7C" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_start%5D=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_end%5D=" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&name_reports=TRANSELEC+-+Fecha+inicio+01_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "+-+Fecha+Fin+" + dias.ToString() + "_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + ""; string sts = "https://medidas.coordinador.cl/index.php/medidas-prmte/?reports%5Bid_internal_empresa%5D=5a42ce700dcec2bd06d6e2b7&reports%5Bid_internal_subestacion%5D=all&reports%5Bid_internal_tension%5D=all&reports%5Bid_internal_pano%5D=all&reports%5Bid_internal_punto_medida%5D=all&months=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "%7C" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_start%5D=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_end%5D=" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&name_reports=STS+-+Fecha+inicio+01_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "+-+Fecha+Fin+" + dias.ToString() + "_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + ""; string colbuntransmision = "https://medidas.coordinador.cl/index.php/medidas-prmte/?reports%5Bid_internal_empresa%5D=5a42cf250dcec2bd06d6e51d&reports%5Bid_internal_subestacion%5D=all&reports%5Bid_internal_tension%5D=all&reports%5Bid_internal_pano%5D=all&reports%5Bid_internal_punto_medida%5D=all&months=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "%7C" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_start%5D=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_end%5D=" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&name_reports=COLBUNTRANSMISION+-+Fecha+inicio+01_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "+-+Fecha+Fin+" + dias.ToString() + "_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + ""; string ajte = "https://medidas.coordinador.cl/index.php/medidas-prmte/?reports%5Bid_internal_empresa%5D=5a42cea90dcec2bd06d6e368&reports%5Bid_internal_subestacion%5D=all&reports%5Bid_internal_tension%5D=all&reports%5Bid_internal_pano%5D=all&reports%5Bid_internal_punto_medida%5D=all&months=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "%7C" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_start%5D=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_end%5D=" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&name_reports=AJTE+-+Fecha+inicio+01_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "+-+Fecha+Fin+" + dias.ToString() + "_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + ""; string eletrans = "https://medidas.coordinador.cl/index.php/medidas-prmte/?reports%5Bid_internal_empresa%5D=5a42cf020dcec2bd06d6e480&reports%5Bid_internal_subestacion%5D=all&reports%5Bid_internal_tension%5D=all&reports%5Bid_internal_pano%5D=all&reports%5Bid_internal_punto_medida%5D=all&months=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "%7C" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_start%5D=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_end%5D=" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&name_reports=ELETRANS+-+Fecha+inicio+01_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "+-+Fecha+Fin+" + dias.ToString() + "_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + ""; string aes_gener = "https://medidas.coordinador.cl/index.php/medidas-prmte/?reports%5Bid_internal_empresa%5D=5a42ceb00dcec2bd06d6e372&reports%5Bid_internal_subestacion%5D=all&reports%5Bid_internal_tension%5D=all&reports%5Bid_internal_pano%5D=all&reports%5Bid_internal_punto_medida%5D=all&months=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "%7C" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_start%5D=01%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&reports%5Bdatetime_end%5D=" + dias.ToString() + "%2F" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "&name_reports=AES_GENER+-+Fecha+inicio+01_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + "+-+Fecha+Fin+" + dias.ToString() + "_" + mes.ToString() + "%2F" + DateTime.Today.Year.ToString() + ""; Console.WriteLine("Bienvenido al sistema de descarga Automática MVEL - Enel"); Console.WriteLine("Tarea programada Archivos PRMT"); WebClient Movimientos_centrales = new WebClient(); byte[] response = Movimientos_centrales.DownloadData(transelec); string dataUTF8 = Encoding.UTF8.GetString(response); dataUTF8 = dataUTF8.Replace("&raquo;", "");//Reemplaza por texto vacío &raquo ya que no pertenece a UTF8 por los carácteres string[] campos = dataUTF8.Split('\n');//Split para texto codigo "\n" byte[] response1 = Movimientos_centrales.DownloadData(sts); byte[] response2 = Movimientos_centrales.DownloadData(colbuntransmision); byte[] response3 = Movimientos_centrales.DownloadData(ajte); byte[] response4 = Movimientos_centrales.DownloadData(eletrans); byte[] response5 = Movimientos_centrales.DownloadData(aes_gener); XmlDocument htmlDocument = new XmlDocument(); nuevoDocTrans = transelec; nuevoDocSts = sts; nuevoDocColbun = colbuntransmision; nuevoDocAjte = ajte; nuevoDocEletrans = eletrans; nuevoDocAes = aes_gener; Console.WriteLine("------------------------"); Console.WriteLine("Archivo encontrado Satisfactoriamente"); Console.WriteLine(""); Console.WriteLine("------------------------"); string destino1 = Path.Combine("\\\\10.10.10.10\\Compartir\\MVEL\\PRMT", "Transelec_MVEL"+mes.ToString()+"_"+DateTime.Today.Year.ToString()+".xlsx"); string destino2 = Path.Combine("\\\\10.10.10.10\\Compartir\\MVEL\\RIO", "STS_MVEL" + mes.ToString() + "_" + DateTime.Today.Year.ToString() + ".xlsx"); string destino3 = Path.Combine("\\\\10.10.10.10\\Compartir\\MVEL\\RIO", "Colbun_MVEL" + mes.ToString() + "_" + DateTime.Today.Year.ToString() + ".xlsx"); string destino4 = Path.Combine("\\\\10.10.10.10\\Compartir\\MVEL\\RIO", "AJTE_MVEL" + mes.ToString() + "_" + DateTime.Today.Year.ToString() + ".xlsx"); string destino5 = Path.Combine("\\\\10.10.10.10\\Compartir\\MVEL\\RIO", "Eletrans_MVEL" + mes.ToString() + "_" + DateTime.Today.Year.ToString() + ".xlsx"); string destino6 = Path.Combine("\\\\10.10.10.10\\Compartir\\MVEL\\RIO", "AESGener_MVEL" + mes.ToString() + "_" + DateTime.Today.Year.ToString() + ".xlsx"); Console.WriteLine("Comprobando si existen los archivos --- En carpeta compartida ETL"); if (File.Exists(destino1)) { File.Delete(destino1); File.Delete(destino2); File.Delete(destino3); File.Delete(destino4); File.Delete(destino5); File.Delete(destino6); Console.WriteLine("Se han borrado archivos para liberar espacio"); } else Console.WriteLine("------------------------"); Console.WriteLine("Descargando archivos"); Movimientos_centrales.DownloadString(nuevoDocTrans);//

    Movimientos_centrales.DownloadFile(nuevoDocSts, destino2); Movimientos_centrales.DownloadFile(nuevoDocColbun, destino3); Movimientos_centrales.DownloadFile(nuevoDocAjte, destino4); Movimientos_centrales.DownloadFile(nuevoDocEletrans, destino5); Movimientos_centrales.DownloadFile(nuevoDocAes, destino6); Movimientos_centrales.Dispose(); Console.WriteLine("Descarga correcta"); Console.WriteLine("------------------------"); } catch (Exception ex) { Console.WriteLine("Ocurrio un error--->" + "" + ex); throw; } } } }



    Joel Baez



    • Editado Joelbaezs jueves, 17 de mayo de 2018 19:07
    jueves, 17 de mayo de 2018 18:54

Todas las respuestas

  • Ok, parece que está haciendo un programa de consola que descarga archivos de un sitio web, y ese sitio web, para proveer el archivo necesita saber la empresa de interés.

    Instale Fiddler o similar para explorar cómo trabaja dicho sitio web.  Lo que necesita saber es el URL de descarga y cómo recibe la información de empresa.  El combobox suele estar ligado a una serie de valores, usualmente numéricos, que se transmiten al URL de la descarga.  Usted necesita Fiddler (o similar) para averiguar el URL y cómo se transmite el dato y bajo qué método (GET o POST).

    Tendrá que aprender un poco del protocolo HTTP para lograr su objetivo.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    jueves, 17 de mayo de 2018 19:04
    Moderador
  • Eso ya esta listo, cada empresa tiene su internal ID por eso son enlaces distintos lo que yo necesito es que si por ejemplo abres ese enlace se genera un excel que te pide guardar o abrir yo quiero capturar ese excel para descargarlo pero no logro como capturarlo ya que el enlace no se genera con algun tipo de extencion

    ejemplo www.enlace.org/miarchivoexcel.xlsx

    en cambio lo que se genera es algo como esto

    www.enlace.org/3232342&action=save


    Joel Baez

    jueves, 17 de mayo de 2018 19:11
  • Ese  número parece ser el ID de la empresa.  Si lo es, y si Fiddler dice que es un GET, no necesita nada más.  Ese es el URL a utilizar.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    jueves, 17 de mayo de 2018 19:13
    Moderador
  • el punto es que logro descargar un archivo xlsx a mi carpeta en red pero este archivo pesa 470kb y el original 4mb

    Joel Baez

    jueves, 17 de mayo de 2018 19:14
  • ¿Ese xlsx de 470kb difiere del que se obtiene utilizando un explorador web?


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    jueves, 17 de mayo de 2018 19:15
    Moderador
  • Si en todo, ya que el del explorador web tiene un formato dentro y el excel de 470kb no puedo nisiquiera

    abrirlo


    Joel Baez

    jueves, 17 de mayo de 2018 19:19
  • Pues tal vez es un problema con el URL o el método.  ¿100% seguro que el URL funciona sin más información?  Es decir, si usted copia el URL y lo pega en una ventana nueva de un explorador, ¿descarga el archivo correcto?

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    jueves, 17 de mayo de 2018 19:42
    Moderador