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.

  • VSTO Excel 2007 addin non riesce ad installare da una condivisione di networking
  • C # regex.split da richtextbox al range excel
  • Come ruotare il text in cella di foglio di calcolo Excel utilizzando OpenXML e C #
  • Esportre un elenco C # di elenchi in Excel
  • Problema di messa a fuoco quando si utilizza WPF e WindowsInteropHelper
  • Utilizzo di Assembly da GAC ​​in .NET Office Addin
  • 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?

  • Metodo Sax OpenXML per esportre file di 100K + in Excel veloce
  • Come saltare le righe da tutti i fogli excel?
  • Registrati dll per VB da C #: Regasm funziona, WiX non: Runtime 430
  • Come esportre Silverlight Pivot View in Excel?
  • Excel.Interop.Chart.Export non chiude il file di image esportto
  • Excel Get_Range con più aree
  • 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.