2009-04-16 11 views
6

Scrivo in Excel file utilizzando OLEDB (C#). Quello che mi serve è solo il formato dei dati RAW.OLEDB, Scrittura di una cella di Excel senza anticipo apostrofo

ho notato tutte le cellule (intestazioni e valori) sono preceduti da apostrofo (')

E' un modo per evitare di aggiungerli in tutte le celle di testo?

Qui è la mia stringa di connessione: uso

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

Ho provato IMEX = 1 in questo modo:

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

Ma dopo che sto ricevendo sotto l'errore:

Il motore di database Microsoft Jet non è stato in grado di trovare l'oggetto 'C: \ Temp \ Nuova cartella \ MF_2009_04_19_2008-11-182009_DMBHCSAM1118.xls'.
Assicurarsi che l'oggetto esista e che si digiti il ​​nome e il nome del percorso correttamente.

uso Infine ho provato IMEX = 0 in questo modo:

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

Questa volta non exeptions sollevate.

Purtroppo non è ancora problema con apostrofi (in modo che ogni miei valori appare come: '123,' abc ecc ...)

Qualche idea?

+0

Perché hai cambiato il modo in cui definisci le Proprietà estese? Nel tuo connectionString originale, hai utilizzato le virgolette singole: "Excel 8.0; HDR = Yes", ma in seguito si utilizzano virgolette (con escape) doppie: \ "Excel 8.0; HDR = Yes; IMEX = 1 \" Potrebbe essere il problema? –

+0

Testato anche con 'e il comportamento è lo stesso. – Maciej

+0

ricorda in Excel che sei limitato a 15 punti decimali di precisione. L'ADO sta probabilmente facendo questo per permetterti di inserire dati che Excel potrebbe altrimenti tentare di arrotondare e accorciare. –

risposta

7

http://support.microsoft.com/kb/257819 ha una dichiarazione secondo la quale questo comportamento potrebbe essere inevitabile quando si inserisce il testo in Excel tramite 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.

sono i dati in modo esplicito il testo, Potrebbe essere costretto in un formato numerico? (stringendo le cannucce ...)

0

So che quando l'inserimento dei dati in Excel, prefisso con un apostrofo è un modo semplice per farlo in un campo di testo. Sei sicuro che i dati non contengano effettivamente l'apostrofo? Se viene aggiunto ai dati al momento dell'entrata, l'unica opzione sarebbe catturarli al momento dell'importazione e gestirli con un codice personalizzato.

+0

Sono sicuro che i dati che sto mettendo non contengono apostrofi. Ad esempio, le intestazioni vengono salvate automaticamente dal motore (opzione HDR = Sì) e contengono anche i caratteri ... – Maciej

0

Controllare il resistry Hkey_Local_Machine/Software/Microsoft/Jet/4,0/Motori/Excel/TypeGuessRows

Questo decide quante righe deve essere sottoposto a scansione prima di decidere il formato per la colonna. Il valore predefinito è 8 e 0 imporrà ADO per analizzare tutti i valori delle colonne prima di scegliere il tipo di dati appropriato.

+0

cambiato questo a 0 e sfortunatamente non ha aiutato ... :( – Maciej

0

Potrebbe non essere adatto alle vostre esigenze, in particolare se è necessario impostare la formattazione nel foglio Excel, ma avete considerato di scrivere i dati in un file CSV e di salvarlo con un'estensione .XLS?

L'altra cosa che si potrebbe provare sarebbe impostare in modo esplicito i tipi di dati di formato delle celle di destinazione nel foglio di Excel per digitare "Testo" (come attraverso Formato> Celle in Excel) prima di tentare di caricare i dati. Per impostazione predefinita, le celle saranno di tipo "Generale" e il driver potrebbe aggiungere l'apostrofo per forzare la visualizzazione dei dati al testo.

+0

Grazie per il suggerimento. In realtà stiamo usando Interop per salvare Excels e meno o più lavori, ma il mio piano era migrare a OLEDB in quanto questa sembra essere una soluzione più semplice ed elegante, ma fino a quando non verrà trovata alcuna soluzione apostrofo, manterrò quella corrente – Maciej

2

Si può semplicemente utilizzare il DSN di Excel? Sembra essere piuttosto onnipresente. Non so .NET, in modo da prendere questo con un grano di sale, ma qui è la mia stringa di connessione per un OLEDB query direttamente da un tavolo stock:

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

E ho usato questa istruzione INSERT di base:

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

Quando ho fatto questo, non ho avuto alcun apostrofi nel mio intervallo di dati. Sto anche utilizzando Excel 2007 e vedo che stai usando Excel 8.0 come driver?

Speriamo che questo ti spinga verso una soluzione!

-1

Prova il seguente trucco per risolvere il problema. Modificare il modello seguendo le istruzioni

  1. Nella prima riga di dati appena sotto la riga di intestazione. Formatta le colonne nel formato richiesto.
  2. inserire alcuni valori fittizi come lo spazio per i caratteri, 0 per i valori numerici ecc
  3. nascondere la prima riga di dati che ha i valori fittizi e salvare il modello

Ora eseguire lo script utilizzando inserto ADO.net

-Venkat Kolla

+0

Questo non risolve il problema. Questo sta solo introducendo dati cattivi. –

1

Inserire alcuni valori fittizi per le colonne che si è attaccato apostrofo nel file di modello. Supponiamo ad esempio che la colonna Nome abbia qualcosa di simile a questo dummyname, e la colonna età sia 99. Invece di inserire una nuova riga nel modello, basta aggiornare la riga (Aggiornamento ..... dove Nome = 'dummyname' ed età = 99).

Questo ha funzionato per me ..

auguro che funziona per voi anche!