Come ottenere il valore della cella con la formattazione applicata (formattato valore della cella) con OpenXML SDK

Sono stato googling e ricerca sul sito, per la risposta, ma non riuscivo a trovare una soluzione, ovunque le persone, per lo più discutere come aggiungere il nuovo numero formato il documento e applicare.

Ciò di cui ho bisogno è quello di ottenere il valore della cella come con una stringa di formattazione applicata – cioè la stessa stringa come dovrebbe essere visualizzato da Excel.

Ho già capito che non esiste un modo semplice o built-in funzione che restituisce il readymade formattato il valore di una cella.

Così mi sembra che per ottenere il valore che ho bisogno di fare due cose:
1. Ottenere la stringa di formato.
2. Formato il valore della cella utilizzando questa stringa.

Ma ho problemi con entrambi i passaggi.

Si può facilmente ottenere CellFormat istanza che dovrebbe contenere NumberFormatId:

CellFormat cellFormat = (CellFormat) document.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.ElementAt(cell.StyleIndex);

Ma come ottenere la stringa di formato con questo NumberFormatId, se l’id corrisponde ad uno standard di formati predefiniti? (cioè è al di sotto di 160) non sono nel documento di foglio di calcolo e non credo che dovrebbero essere hardcoded nell’applicazione.

Inoltre, una volta che la stringa di formato è in qualche modo ottenuto, come applicare al valore della cella? Finora ho capito, il codice dovrebbe controllare il tipo del valore della cella e, se è il Numero – la conversione a stringa utilizzando la stringa di formato.

Ho trovato questa pagina che accenna all’uso di Microsoft.Office.Excel.Di interoperabilità, ma io preferirei rimanere con OpenXML SDK solo.

Nel complesso, sono molto sorpreso che è così difficile trovare una risposta definitiva a questa domanda sul Web, e ho pensato che questo sarebbe qualcosa che molti sviluppatori hanno bisogno nel loro lavoro quotidiano.

InformationsquelleAutor El G | 2012-01-19

 

2 Replies
  1. 8

    Uomini, questo è un duro… sarò l’aggiunta di qui le cose che ho trovato che potrebbe essere la pena..

    Primo è quello di ottenere il formato di numerazione della cella (una volta la CellFormat:

    string format = excel.WorkbookPart.WorkbookStylesPart.Stylesheet.NumberingFormats.Elements<NumberingFormat>()
                .Where(i => i.NumberFormatId.ToString() == cellFormat.NumberFormatId.ToString())
                .First().FormatCode;

    Per ulteriori informazioni su questo si può andare a: NumberingFormats

    Im cercando di scoprire come applicare questo formato per il cell.CellValue proprietà… penso che è il modo in cui si deve andare!

    Ok, leggendo il ClosedXml codice (open source), sembra essere facile per ottenere il formato.

    Semplicemente convertire il valore di testo per il suo tipo (int, double, ecc) e chiamare il metodo ToString che passa il formato. Stavo cercando di farlo con la Stringa.Formato e prezzo. Ive ha provato il metodo ToString e funziona, ma qualcosa ancora manca.

    Vi raccomando di guardare a questa classe e ottenere il codice dal metodo GetFormattedString() come @El G raccontare nel suo commento.

    Bassicaly devi aggiungere qualcosa di simile a questo:

    double d = double.Parse(cell.CellValue.InnerText);
    string val = d.ToString(format);

    Spero che ti aiuta…

    • Grazie mille per la condivisione di queste informazioni, Guido! Per favore fatemi sapere se si trova un modo per applicare il formato.
    • Su una nota di parte, se la soluzione non deve essere limitata ai soli OpenXML SDK, è possibile utilizzare ClosedXML biblioteca, in cui tutte le azioni sembrano essere molto più facile che in puro OpenXML (ed è costruito sulla cima di OpenXML). In ClosedXML documentazione in i valori di cella di esempio c’è questa riga: ‘String booleanFormattedString = cellBoolean.GetFormattedString();’ a quanto Pare si fa quello che stiamo cercando. Anche scavando nel codice di questo metodo potrebbe aiutare a capire.
    • Ho aggiunto alcune informazioni utili! credo che il vostro problema sarà risolto a questo punto!
    • Grazie mille, Guido!
    • Puoi aiutare me la seguente domanda: stackoverflow.com/questions/15791732/…
  2. 0

    Se si vuole prendere il valore della cella con la formattazione applicata, come visualizzato in Excel, è possibile utilizzare .Proprietà Text dell’oggetto Cella. Come questo:

    String formattedValue = cell.Text
    • Non sembra essere una proprietà di Testo nella Cella di classe, solo in CellValue (che non è ciò che è visualizzato in Excel)

Lascia un commento