2009-04-16 25 views
6

Estoy escribiendo en archivo Excel usando OLEDB (C#). Lo que necesito es solo formato de datos SIN PROCESAR.OLEDB, Escribir celda de Excel sin apóstrofo principal

me he dado cuenta que todas las células (cabeceras y valores) tienen el prefijo apóstrofe (')

¿Es una forma de evitar la adición de ellos en todas las celdas de texto?

Aquí es mi cadena de conexión:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
filePath + ";Extended Properties='Excel 8.0;HDR=Yes'"; 

He intentado el uso IMEX = 1 como esto:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
    filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""; 

Pero después de que yo estoy recibiendo por debajo de error:

El motor de base de datos Microsoft Jet no pudo encontrar el objeto 'C: \ Temp \ New Folder \ MF_2009_04_19_2008-11-182009_DMBHCSAM1118.xls'.
Asegúrese de que el objeto exista y que deletree correctamente su nombre y la ruta.

uso Finalmente he intentado IMEX = 0 como esto:

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
    filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\""; 

Esta vez no hay Excepciones plantearon.

Desafortunadamente todavía hay un problema con apóstrofes (por lo que cada uno mira mis valores como: '123,' abc etc ...)

Alguna idea?

+0

¿Por qué cambió la forma en que define las Propiedades Extendidas? En su connectionString original, utilizó comillas simples: 'Excel 8.0; HDR = Yes', pero luego usa comillas dobles (escapadas): \ "Excel 8.0; HDR = Yes; IMEX = 1 \" ¿Podría ser ese el problema? –

+0

Probado esto también con 'y el comportamiento es el mismo. – Maciej

+0

recuerda en Excel que tienes un límite de 15 puntos decimales de precisión. Es probable que ADO esté haciendo esto para permitirle ingresar datos que de otro modo Excel podría tratar de redondear y acortar. –

Respuesta

7

http://support.microsoft.com/kb/257819 tiene una declaración en el sentido de que este comportamiento podría ser inevitable cuando se inserta texto en Excel a través de ADO:

A caution about editing Excel data with ADO: When you insert text data into Excel with ADO, the text value is preceded with a single quote. This may cause problems later in working with the new data.

son los datos de forma explícita texto, ¿podría ser obligado a un formato numérico? (agarrándose de pajas ...)

0

sé que al introducir datos en Excel, prefijándolo con un apóstrofe es una manera fácil de hacerlo en un campo de texto. ¿Estás seguro de que los datos en realidad no contienen el apóstrofo? Si se agrega a los datos en el momento de la entrada, su única opción sería capturarlos en el momento de la importación y tratarlos en algún código personalizado.

+0

Estoy seguro de que los datos de datos que estoy poniendo no contienen apóstrofes. Por ejemplo, los encabezados se guardan automáticamente por motor (opción HDR = Sí) y también contienen esos caracteres ... – Maciej

0

Compruebe el resistry Hkey_Local_Machine/Software/Microsoft/Jet/4.0/Motores/Excel/TypeGuessRows

Este decide cuántas filas deben ser escaneados antes de decidir el formato de la columna. El valor predeterminado es 8 y 0 obligará a ADO a analizar todos los valores de columna antes de elegir el tipo de datos apropiado.

+0

cambió esto a 0 y desafortunadamente no ayudó ... :( – Maciej

0

Puede que no se ajuste a sus requisitos, especialmente si necesita configurar el formato en la hoja de Excel, pero ¿ha considerado escribir los datos en un archivo CSV y guardarlos con la extensión .XLS?

La otra cosa que podría intentar sería establecer explícitamente tipos de datos de formato de sus celdas objetivo en la hoja de Excel para escribir "Texto" (como a través de Formato> Celdas dentro de Excel) antes de intentar cargar datos. Por defecto, las celdas serán del tipo "General", y el controlador puede estar agregando el apóstrofo para obligar a que sus datos se muestren en el texto.

+0

Gracias por la sugerencia. En realidad, estamos usando Interop para ahorrar Excel y menos o más trabajos. Pero mi plan era migrar a OLEDB ya que parece ser una solución más fácil y más elegante. Pero hasta que no se encuentre una solución de apóstrofo, lo mantendré actualizado. – Maciej

2

¿Podría usar el Excel DSN? Parece ser bastante omnipresente. No sé .NET, así que tomar esto con un grano de sal, pero aquí está mi cadena de conexión OLEDB para una consulta directamente desde una mesa stock:

"Provider=MSDASQL.1;Persist Security Info=True;Extended Properties 
=""DSN=Excel Files;DBQ=" & filePath & "\" & fileName & 
";DriverId=1046;MaxBufferSize=2048;PageTimeout=5;""" 

Y utilicé esta instrucción INSERT básica:

INSERT INTO rngOutput VALUES (1, 'ABC', '$1.00', 1300) 

Cuando hice esto, no tenía ningún apóstrofo en mi rango de datos. También estoy usando Excel 2007, y veo que estás usando Excel 8.0 como tu controlador.

¡Con suerte, eso lo empuja hacia una solución!

-1

Pruebe el siguiente truco para resolver el problema. Modifique la plantilla según las instrucciones

  1. En la primera fila de datos justo debajo de la fila del encabezado. Formatee las columnas en el formato requerido.
  2. Introduzca algunos valores ficticios como el espacio para los personajes, 0 para valores numéricos etc.
  3. ocultar la primera fila de datos que tiene los valores ficticios y guardar la plantilla

Ahora ejecute la secuencia de comandos de inserción utilizando ADO.net

-Venkat Kolla

+0

Eso no está realmente resolviendo el problema. Esto solo está introduciendo datos malos. –

1

Insertar algunos valores ficticios para las columnas que se adjunta apóstrofe en el archivo de plantilla. Digamos por ejemplo para la columna Nombre poner algo así como este nombre ficticio, y la columna edad pone 99. En lugar de insertar una nueva fila en la plantilla simplemente actualice la fila (Actualizar ..... donde Nombre = 'nombre_de_dummy' y edad = 99).

Esto ha funcionado para mí ..

espero que funcione para usted también!

Cuestiones relacionadas