none
Problema Al escribir archivo txt RRS feed

  • Pregunta

  • Buenas, vengo por acá en busca de su apoyo.

    Estoy desarrollando una app ASP con C#, la función de esta es, leer un documento (el cual puede ser .xls, .xlsx, .csv, .xlt, .xlsb) y su contenido debe ser llevado a un nuevo formato y sacarlo por un documento .txt.

    Todo hasta el momento iba bien. pero el problema surge con un archivo en especifico, el StreamWriter omite los primeros 33 registros (Filas) del documento excel, aclaro, ya comprobe por depuracion que la variable que contiene el arreglo de valores tiene la totalidad de los registros.

    Al final StreamWriter solo escribe 40 de 73 registros que contiene el archivo.

    Como nota: Lo unico que ha funcionado es crear un nuevo archivo excel y pegar los valores para que luego sea leido.

    Adjunto el codigo que crea los documentos *.txt

    private bool create(string header, List<string> src, string dest)
            {   
                if (src.Count > 0)
                {
                    using (
                    FileStream fs = new FileStream(dest, FileMode.Create, FileAccess.Write, FileShare.Read))
                    {
                        using (StreamWriter sw = new StreamWriter(fs))
                        {
                            sw.WriteLine(header);
                            foreach (String data in src)
                                sw.WriteLine(data);
                            sw.Close();
                        }
                    }
                }
    
                int tempvalue = src.Count;
                src.Clear();
    
                return (tempvalue > 0) && (new FileInfo(dest).Exists);
            }

    Agradezco de antemano el apoyo brindado.




    miércoles, 13 de junio de 2018 14:40

Todas las respuestas

  • Dionys, el código que muestra es correcto.  Su problema debe estar en quien genera la colección.  Me parece imposible el bucle foreach salte líneas.  Simplemente no pasa, diría yo.  Si usted de verdad insiste en que sí, lo invito a publicar un ZIP con un proyecto de prueba que reproduzca el problema.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    miércoles, 13 de junio de 2018 18:47
    Moderador
  • Disculpa, volvi a revisar y si es cierto, la variable src solo tiene los ultimos 33 registros. Aqui abajo adjunto el codigo que evalua si en exportData existe el nombre de una hoja de excel, alli hacer un corte y generar otro archivo(genera un archivo por cada hoja). Pero el problema ahora seria por que corta en medio de la lista si solo existe una hoja en el documento.

    exportData.ForEach (delegate(String line){
                            
                            if (!line.Contains("$"))
                                sheetLines.Add(line);
    
                            if ((line.Contains("$") && sheetLines.Count > 0) || line.Equals(exportData[exportData.Count - 1]) && !sheetName.Equals(""))
                                create(hdr, sheetLines, SavePath + "\\" + DocNSpacName + "_" + sheetName.Replace("'", "").Replace("$", "").Replace(" ", "_") + ".txt");                        
    
                            if (line.Equals(exportData[exportData.Count - 1]) && sheetName.Equals(""))
                                create(hdr, sheetLines, SavePath + "\\" + DocNSpacName + ".txt");
    
                            sheetName = (line.Contains("$")) ? line : sheetName;
                        });

    Este fragmento de codigo evalua la lista exportData, y es el responsable de llamar al metodo arriba mencionado.


    https://1drv.ms/u/s!AnWZjPIe3tcCmzIUn8_SDjw8s7Gu

    Ese link tiene el proyecto.

    El archivo problema no te lo puedo publicar por politicas de la empresa donde trabajo. Pero si me das un correo te lo puedo mandar.


    miércoles, 13 de junio de 2018 19:59