2012-08-08 5 views
7

Uso EPPlus per esportare il file excel 2007. Il file può essere esportato normalmente ma ho qualche problema con l'impostazione del formato della colonna. La mia colonna di stringa con stile numerico (ordine di acquisto n. Ex 49000001) può essere esportata con il tag verde in alto a sinistra di ogni cella, come posso rimuoverlo?Utilizzo di EPPlus Excel - Come ignorare il controllo degli errori di Excel o rimuovere il tag verde in alto a sinistra della cella

cerco di impostare formato numerico a "Generale", ma non è un lavoro

prega di aiuto.

P.S io uso C#

risposta

0

Converti ordine di acquisto Nessun valore al numero, e quindi memorizzare nella cella. Il tag verde in alto a sinistra di ogni cella, sta arrivando perché stai memorizzando il numero come stringa lì.

14

EPPLus al momento non supporta la disattivazione del tag verde. Tuttavia, è possibile modificare il progetto per sopprimerlo. In primo luogo sarà necessario aggiungere una nuova classe al progetto, ExcelIgnoredError.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 

namespace OfficeOpenXml 
{ 
    public class ExcelIgnoredError : XmlHelper 
    { 
     private ExcelWorksheet _worksheet; 

     /// <summary> 
     /// Constructor 
     /// </summary> 
     internal ExcelIgnoredError(XmlNamespaceManager ns, XmlNode node, ExcelWorksheet xlWorkSheet) : 
      base(ns, node) 
     { 
      _worksheet = xlWorkSheet; 
     } 


     public bool NumberStoredAsText 
     { 
      get 
      { 
       return GetXmlNodeBool("@numberStoredAsText"); 
      } 
      set 
      { 
       SetXmlNodeBool("@numberStoredAsText", value); 
      } 
     } 


     public bool TwoDigitTextYear 
     { 
      get 
      { 
       return GetXmlNodeBool("@twoDigitTextYear"); 
      } 
      set 
      { 
       SetXmlNodeBool("@twoDigitTextYear", value); 
      } 
     } 


     public string Range 
     { 
      get 
      { 
       return GetXmlNodeString("@sqref"); 
      } 
      set 
      { 
       SetXmlNodeString("@sqref", value); 
      } 
     } 
    } 
} 


Successivamente sarà necessario modificare ExcelWorkSheet.cs, aggiungendo questo codice:

public ExcelIgnoredError _ignoredError; 

public ExcelIgnoredError IgnoredError 
{ 
    get 
    { 
     if (_ignoredError == null) 
     { 
      // Check that ignoredErrors exists 
      XmlNode node = TopNode.SelectSingleNode("d:ignoredErrors", NameSpaceManager); 

      if (node == null) 
      { 
       CreateNode("d:ignoredErrors"); 
      } 

      //Check that ignoredError exists 
      node = TopNode.SelectSingleNode("d:ignoredErrors/d:ignoredError", NameSpaceManager); 

      if (node == null) 
      { 
       CreateNode("d:ignoredErrors/d:ignoredError"); 
       node = TopNode.SelectSingleNode("d:ignoredErrors/d:ignoredError", NameSpaceManager); 
      } 

      _ignoredError = new ExcelIgnoredError(NameSpaceManager, node, this); 
     } 

     return (_ignoredError); 
    } 
} 


Compile la soluzione EPPPlus, includila nel tuo progetto e sarai in grado di rimuovere i tag usando un codice simile a questo:

//Get a reference to the worksheet 
ExcelWorkSheet sheet = package.WorkBook.WorkSheets(0); 

//Set the cell range to ignore errors on to the whole sheet 
sheet.IgnoredError.Range = Sheet.Dimension.Address; 

//Do not display the warning 'number stored as text' 
sheet.IgnoredError.NumberStoredAsText = true; 
+0

Nota che le ultime righe devono essere '// Non visualizzare il messaggio 'numero memorizzato come testo'. Ignora l'errore. NumeroStoredAsText = Vero;' E grazie per aver postato questo messaggio! Funziona alla grande! – user2029432

+0

Si noti che l'impostazione dell'intervallo in questa soluzione alternativa è importante. Sono stato negligente e ha ottenuto un errore di Excel all'apertura della cartella di lavoro. –

+1

@briddums Non ho la possibilità di modificare la fonte, c'è un modo per modificare l'XML "dall'esterno"? –

-1

Ho risolto questo problema in modo molto più semplice. E.g. se definisco il valore "123" come oggetto, non una stringa, quindi memorizza nel file excel OK.

+2

Purtroppo la memorizzazione del valore 00come oggetto invece di una stringa verrà visualizzata nel file excel come 123 e non come 000123. La stringa è importante per mantenere il formato del testo. – briddums

-1

È possibile utilizzare

worksheet.Cell[1,1].Formula = "TEXT(" + cellvalue ")"; 
0

Sì, EPPlus non può trattare i dati come il numero a seconda del suo valore. Se i dati sottostanti sono in tipo di dati stringa, puoi provare a recuperarli in un tipo di dati numerico. ad es. Se ottieni dati da una stored procedure, prova a ottenerli come valore numerico. C'è stato un problema quando lo abbiamo implementato. Abbiamo usato la stessa stored procedure per Web e per generare Excel. L'interfaccia utente Web aveva bisogno che fosse in un tipo di dati stringa per motivi di formattazione e EPPlus ovviamente ha bisogno che sia nel formato numerico in modo che possa mostrarlo come un numero. La soluzione era convertire i dati richiesti in numerici durante l'esportazione in Excel usando EPPlus nel codice C#. Quindi è necessario scrivere una funzione di conversione per convertire i campi obbligatori nel DataTable nel tipo di dati richiesto (o implementare la logica di conversione mediante cast o conversione nella stored procedure).

In breve: - Scrivere una funzione C# per convertire i tipi di dati delle colonne nel DataTable che si ottiene prima di inviarlo come foglio Excel utilizzando EPPlus.

Problemi correlati