Come fare un formato di data corretto quando scrivi i dati in Excel

Importzione di un DataTable in un file Excel utilizzando l'integerpro ufficio. Il problema è che Excel non riconosce date come tali, ma invece visualizza numbers. In un altro caso passa una string che poi riconosce come data. In entrambi i casi i dati sono confusi.

Ho provato NumberFormat @ che whereva memorizzare la cella in formato text, ma non funzionava neanche.

  • Esportre per eccellere aprirlo
  • leggere app.config nel componente aggiuntivo condiviso
  • Excel 2007 è installato nel sistema, ma non in grado di rilevarlo tramite codice
  • È ansible copiare la row (con dati, unione, stile) in Excel utilizzando Epplus?
  • Connessione ODBC all'errore di Excel
  • in un'applicazione .net NET Microsoft.Office.Interop.Excel.Workbooks.Open () funziona solo in modalità di debug
  • Application app = new Application(); app.Visible = false; app.ScreenUpdating = false; app.DisplayAlerts = false; app.EnableAnimations = false; app.EnableAutoComplete = false; app.EnableSound = false; app.EnableTipWizard = false; app.ErrorCheckingOptions.BackgroundChecking = false; Workbook wb = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); Worksheet ws = (Worksheet)wb.Worksheets[1]; for (int j = 0; j < dt.Rows.Count; j++) { for (int i = 0; i < dt.Columns.Count; i++) { Range rng = ws.Cells[j+2, i+1]as Range; rng.Value2 = dt.Rows[j][i].ToString(); rng.NumberFormat = "@"; } } wb.SaveAs(filename, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlExclusive, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); wb.Close(false, Missing.Value, Missing.Value); app.Workbooks.Close(); app.Application.Quit(); app.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(ws); System.Runtime.InteropServices.Marshal.ReleaseComObject(wb); System.Runtime.InteropServices.Marshal.ReleaseComObject(app); ws = null; wb = null; app = null; GC.Collect(); 

    Perché non funziona il mio NumberFormat @? Non dovrebbe che Textformat visualizzare tutto ciò che ho inserito?

  • Invio di un arrays di stringhe da VBA a una DLL C ++, quindi iterando attraverso quelle stringhe
  • Errori sul caricamento di Excel file su SQL utilizzando OLEDB
  • Come passare i dati da C # a un file esistente Excel
  • Epplus c # altezza reale della row
  • Aggiungi C # excel
  • Il codice viene eseguito sul server di sviluppo ma non su IIS
  • 6 Solutions collect form web for “Come fare un formato di data corretto quando scrivi i dati in Excel”

    Ha provato a formattare l'intera colonna come una colonna di data? Qualcosa come questo:

     Range rg = (Excel.Range)worksheetobject.Cells[1,1]; rg.EntireColumn.NumberFormat = "MM/DD/YYYY"; 

    L'altra cosa che potresti provare sarebbe mettere un singolo segno di spunta prima dell'espressione di string prima di caricare il text nella cella di Excel (non sicuro se ciò sia importnte o less, ma funziona quando si digita direttamente un text in una cella).

    Prova ad usare

     DateTime.ToOADate() 

    E metterlo come un doppio nella cella. Ci potrebbero essere problemi con Excel su Mac Systems (utilizza un diverso tempo di dati -> double conversione), ma dovrebbe funzionare bene per la maggior parte dei casi.

    Spero che questo ti aiuti.

    So che questa domanda è vecchia ma popolando cellule Excell con date attraverso VSTO ha un paio di gotchas.

    Ho scoperto che la Formula non funziona con date con formato yyyy-mmm-dd – anche se le celle erano DATE FORMAT! Devi tradurre le date in un formato dd / mm / yyyy da utilizzare nelle formule.

    Ad esempio le date in cui sono tornato da SQL Analysis Server e ho dovuto flip e quindi formattare:

     using (var dateRn = xlApp.Range["A1"].WithComCleanup()) { dateRn.Resource.Value2 = Convert.ToDateTime(dateRn.Resource.Value2).ToString("dd-MMM-yyyy"); } using (var rn = xlApp.Range["A1:A10"].WithComCleanup()) { rn.Resource.Select(); rn.Resource.NumberFormat = "d-mmm-yyyy;@"; } 

    In caso contrario, le date di utilizzo delle formule non funzionano – la formula in cella C4 è la stessa di C3:

    immettere qui la descrizione dell'immagine

    Vecchia domanda ma ancora rilevante. Ho generato un dictionary che ottiene il formato datetime appropriato per each regione, ecco la class di helper I generata:

    https://github.com/anakic/ExcelDateTimeFormatHelper/blob/master/FormatHelper.cs

    FWIW questo è il modo in cui ho fatto:

    1. aperto excel, inserito manualmente un datetime nella prima cella di una cartella di lavoro
    2. ha aperto la window delle regioni nel pannello di controllo
    3. ha utilizzato Spy per scoprire le HWND delle regioni combobox e il button Applica in modo da poter usare SetForegroundWindow e SendKey per cambiare la regione (non è stato ansible trovare come cambiare la regione attraverso l'API di Windows)
    4. iterato attraverso tutte le regioni e per each regione ha chiesto Excel per il NumberFormat della cella che conteneva la data, ha salvato questi dati in un file

    Questo ha funzionato per me:

     hoja_trabajo.Cells[i + 2, j + 1] = fecha.ToString("dd-MMM-yyyy").Replace(".", ""); 

    Questo ha funzionato per me:

     sheet.Cells[currentRow, ++currentColumn] = "'" + theDate.ToString("MM/dd/yy"); 

    Notare il segno di spunta aggiunto prima della data.

    Microsoft Office Excel Spreadsheet è il miglior software di Office, Excel VBA e formule Excel rendono il foglio di calcolo più veloce.