none
ADO NET CON EXCEL TRUNCA UNA CADENA DE CARACTERES DE MAS DE 200 CARACTERES RRS feed

  • Question

  • Buenas tardes, 

    Estoy haciendo una aplicacion que toma los datos de un archivo de excell y los pasa a un archivo .txt organizados segun los requerimientos dados, el codigo que uso para capturar los datos de excel es el siguiente:

                            

    public List<String> ObtenerListaNombres(String rutaOrigen, String HojaNum,int fila)
            {
                List<String> nombres = new List<string>();

                using (OleDbConnection cn = new OleDbConnection())
                {
                    using (OleDbCommand cmd = new OleDbCommand())
                    {
                        cn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
                            /*"C:\path\file.xls"*/ + @rutaOrigen + ";Extended Properties=\"Excel 12.0 Xml;Max Buffer Size=8192;HDR=No;IMEX=1\";";
                        cn.Open();
                        //cn.Properties("Jet OLEDB:Max Buffer Size") = 256
                        cmd.Connection = cn;
                        cmd.CommandText = "select F"+fila+" from [" + HojaNum + "$]";

                        //Consulta para leer un RANGO de filas o columnas de excel
                        //string sql = "SELECT * FROM [Hoja1$A5:F15]";

                        OleDbDataReader reader = cmd.ExecuteReader();
                        if (reader.HasRows)
                        {

                            while (reader.Read())
                            {
                                nombres.Add(reader.GetString(0));
                            }
                        }
                        else
                        {
                            Console.WriteLine("No rows found.");
                        }
                        reader.Close();
                    }
                }
                return nombres;
            }

    pero dentro del archivo de excel hay  una cadena de caracteres que tiene  una  longitud de 200 caracteres, al pasarla a .NET las tomo en un List<String>, y esta y otras cadenas son cortadas. Por ejemplo :

    si tengo esto en excell == "CUPOS FORMACION COMPLEMENTARIA VICTIMAS (SIN DESPLAZADOS POR LA VIOLENCIA): MINAS ANTIPERSONAL MUNICION SIN EXPLOTAR Y ARTEFACTO EXPLOSIVO IMPROVISADO, AMENAZA, DELITOS CONTRA LA LIBERTAD Y LA INTEGRIDAD SEXUAL EN DESARROLLO DEL CONFLICTO ARMADO, DESAPARICION FORZADA, HOMICIDIO MASACRE, SECUESTRO, TORTURA, VINCULACION DE NIÑOS NIÑAS Y ADOLESCENTES A ACTIVIDADES RELACIONADAS CON GRUPOS ARMADOS, ABANDONO O DESPOJO FORZADO DE TIERRAS, ACTOS TERRORISTA/ATENTADOS/COMBATES/ENFRENTAMIENTOS/HOSTIGAMIENTOS, HERIDO, RECLUTAMIENTO FORZADO "

    el me trae = 

    CUPOS FORMACION COMPLEMENTARIA VICTIMAS (SIN DESPLAZADOS POR LA VIOLENCIA): MINAS ANTIPERSONAL MUNICION SIN EXPLOTAR Y ARTEFACTO EXPLOSIVO IMPROVISADO, AMENAZA, DELITOS CONTRA LA LIBERTAD Y LA INTEGRIDAD SEXUAL EN DESARROLLO DEL CONFLICTO ARMADO, DESAPARI

    Les agradezco su colaboraciòn, llevo varios dias dandole vueltas pero los resultados siempre son los mismos

    Mil gracias

    Tuesday, December 29, 2015 9:36 PM

All replies

  • Hi Helber,

    This is the English forum. Could you please describe your issue in English, and we can better solve the problem.

    Best regards,


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    Wednesday, December 30, 2015 9:37 AM
    Moderator
  • Excuseme

    Good afternoon,

    I'm making an application that takes data from excel file and passes it to a .txt file organized according to the given requirements, the code I use to capture data from excel is as follows:

    public List<String> ObtenerListaNombres(String rutaOrigen, String HojaNum,int fila)
            {
                List<String> nombres = new List<string>();

                using (OleDbConnection cn = new OleDbConnection())
                {
                    using (OleDbCommand cmd = new OleDbCommand())
                    {
                        cn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
                            /*"C:\path\file.xls"*/ + @rutaOrigen + ";Extended Properties=\"Excel 12.0 Xml;Max Buffer Size=8192;HDR=No;IMEX=1\";";
                        cn.Open();
                        //cn.Properties("Jet OLEDB:Max Buffer Size") = 256
                        cmd.Connection = cn;
                        cmd.CommandText = "select F"+fila+" from [" + HojaNum + "$]";

                        //Consulta para leer un RANGO de filas o columnas de excel
                        //string sql = "SELECT * FROM [Hoja1$A5:F15]";

                        OleDbDataReader reader = cmd.ExecuteReader();
                        if (reader.HasRows)
                        {

                            while (reader.Read())
                            {
                                nombres.Add(reader.GetString(0));
                            }
                        }
                        else
                        {
                            Console.WriteLine("No rows found.");
                        }
                        reader.Close();
                    }
                }
                return nombres;
            }

    but within the Excel file is a string that has a length of 200 characters, at the moment to take a .NET List <String> and this and other chains are cut. For instance :

    if I have this in excell == "ADDITIONAL TRAINING QUOTAS VICTIMS (SIN displaced by violence): MINE unexploded ordnance and improvised explosive device, threat, CRIMES AGAINST SEXUAL FREEDOM AND INTEGRITY IN DEVELOPMENT OF THE ARMED CONFLICT, forced disappearance, MURDER SLAUGHTER, kidnapping, torture, recruitment of children and adolescents to ARMED ACTIVITIES, abandonment or dispossession FORCED LAND, TERRORIST ACTS / ATTACKS / FIGHTING / CLASHES / HARASSMENT, injured, forced recruitment "

    he brings me =

    ADDITIONAL TRAINING QUOTAS VICTIMS (SIN displaced by violence): MINE AND UXO IED THREAT, CRIMES AGAINST SEXUAL FREEDOM AND INTEGRITY IN DEVELOPMENT OF THE ARMED CONFLICT, DESAPARI

    I appreciate your cooperation, took several days mulling over but the results are always the same

    Thank you

    Wednesday, December 30, 2015 4:43 PM
  • I would try setting the TypeGuessRows entry in the Registry to 0 so that all rows are scanned in order to determine the correct data type for the column (should be Memo instead of Text). See below link for explanation:

    https://social.msdn.microsoft.com/Forums/en-US/41222f92-b079-4e6c-ae17-3aa3534a45a7/setting-typeguessrows-for-excel-ace-driver?forum=sqlintegrationservices


    Paul ~~~~ Microsoft MVP (Visual Basic)

    Wednesday, December 30, 2015 5:19 PM