2014-05-06 4 views
8

Ich verwende apache poi api, um Excel-Blatt in meiner Anwendung in Java zu generieren. Daten, die in Excel festgelegt sind, werden dynamisch mit dem Typ string ausgegeben. Für Spalte1 sind die Werte alphanumerisch. Wenn ich Excel erzeuge, gibt es mir grüne Anzeige mit Warnung "Nummer als Text gespeichert" oder "Textdatum mit 2-stelligem Jahr" auf Zelle.Wie die Warnung in Excel mit Apache Poi in JAVA entfernen?

Ich möchte diese Warnung entfernen. Ich habe festgestellt, dass von Excel können wir eine Zelle als 'Fehler ignorieren', um die Warnung zu ignorieren.

Wie programmgesteuert oder gibt es eine andere Alternative, um diese Aufgabe zu erfüllen?

Ich habe auch einen Screenshot, der eine Warnung mit grüner Markierung zeigt.

enter image description here

Code:

if (cellValue != null && (shouldBeRightAlign)) 
{ 
cellType = Cell.CELL_TYPE_NUMERIC; 
} 
else if (cellValue != null) 
{ 
cellType = Cell.CELL_TYPE_STRING; 
} 
cell.setCellValue(cellValue); 
+1

Können Sie den Zellenwert nicht mit dem entsprechenden Datenformat wie Zahl, Datum, String, etc. – vels4j

+0

Ich habe das auch versucht, aber immer noch nicht funktioniert .. – unknown

+0

@ vels4j Ich habe das aber immer noch das gleiche Problem. –

Antwort

1

Stellen Sie den cell type wie:

HSSFRow row = sheet.createRow(sheet.getLastRowNum()); 
HSSFCell cell = row.createCell(0); 
cell.setCellType(Cell.CELL_TYPE_STRING); 
cell.setCellType(Cell.CELL_TYPE_NUMERIC); 

Für alphanumerische und Character Zelltyp Cell.CELL_TYPE_STRING für Nummer sein wird, wird Zelltyp sein CELL_TYPE_NUMERIC

Sie können mehr über Zelltyp von Cell und HSSFCell Dokumentation erhalten.

+1

Siehe bearbeitete Frage, in der ich erwähnt habe, dass der Wert für Spalte1 alphanumerisch ist. Es kann Zeichen haben oder es kann nur Nummer sein. –

+2

Aber immer noch werden Sie gewarnt, seine Frage ist, Warnungen zu entfernen – vels4j

+0

@CharveeShah überprüfen Sie die bearbeitete Antwort. Sie müssen auf der Java-Seite prüfen, ob der Datentyp 'Character' ist, und dann' CELL_TYPE_STRING' oder 'CELL_TYPE_NUMERIC' für die Nummer verwenden. – Vishrant

0

Alt ein, aber immer noch es Dies wird einige eine von .NET, die NPOI verwenden helfen

Ich habe versucht, mit

cell.SetCellType(NPOI.SS.UserModel.CellType.NUMERIC); 

, die nicht geholfen haben. aber der folgende Code funktioniert

dCell.setCellValue(Convert.ToDouble(112.45)); //.NET syntax 

dCell.setCellValue(new Double("123")); // Java Syntax 
+0

Der Wert ist nicht spezifisch, dass es numerisch ist. Es kann numerisch oder alphanumerisch sein. –

+0

@CharveeShah was ist String dann? Welchen Zweck erfüllt CellType? – Peru

+0

Werte stammen von mysql Query.So 1. Spalte hat beide Wert alphanumerische oder nur numerische.Wenn nur numerische Wert kommt dann zeigt es grün Indikator.Und für Spalte 5 die Daten kommen mit "," value.In, dass auch grüne Indikator ist Dort. –

0

Ich war mit dem gleichen Problem konfrontiert. Ich habe es gelöst, indem ich die Daten überprüft habe, ob es ein Integer/Float ist, und die Bedingung (CELL_TYPE) entsprechend setze. Sie finden den Code Snippet:

if(!isInteger(data)) 
      { 
      cell.setCellValue(data); 
      } 
      else 
      { 
       cell.setCellType(Cell.CELL_TYPE_NUMERIC); 
       cell.setCellValue(Float.parseFloat(data));//.parseInt(data)); 
      } 
public static boolean isInteger(String s) { 
    try { 
     java.lang.Float.parseFloat(s); 
    } catch(NumberFormatException e) { 
     return false; 
    } 
    return true; 
} 

Hier Daten ist ein String aus der Anordnung der Liste aus der Datenquelle (Excel/CSV) Diese die grüne Warnung aufgelöst.

+0

Ich habe das schon gemacht, aber immer noch war ich mit dem Problem konfrontiert, weil ich in den Daten einen Wert von 1,00 mit Komma bekomme, also gab es mir einen Fehler bei der Methode parseFloat. –

+0

können Sie die Spalten hinzufügen, die Integer haben.private static Arraylist intColRef = new Arraylist () {{ \t \t for (int i = 0; i <= 10; i ++) \t \t { \t \t \t add (i); \t \t} \t \t}}; if (! IntColRef.contains (cellNum)) { cells.setCellValue (jeweils); } sonst { cells.setCellType (Cell.CELL_TYPE_NUMERIC); cells.setCellValue (Integer.parseInt (jedes)); } –

+0

alle Werte kommen dynamisch nur das Format ist gleich. In einem Fall ist es möglich, dass ich den gesamten String-Wert habe. oder Kombination von Werten. Ich habe keine Werte vordefiniert. –

2

Scheinbar ist dies derzeit mit Apache POI nicht möglich. Es gibt eine Reihe von Bug-Reports/RFEs zum Thema:

https://issues.apache.org/bugzilla/show_bug.cgi?id=58641

https://issues.apache.org/bugzilla/show_bug.cgi?id=54868

https://issues.apache.org/bugzilla/show_bug.cgi?id=46136

Die eigentliche Attribut (das Attribut, das sagt eine solche Warnung zu ignorieren) besteht in der Excel-persistent Format und wird auf einer pro Zelle aufgezeichnet. Es ist nur so, dass Apache POI es nicht ausstellt, soweit ich das anhand der Fehlerberichte feststellen kann.

Sie Um eine Vorstellung davon zu geben, was diese wie die xlsx-Format in Excel aussieht:

</worksheet> 
    ... 
    <ignoredErrors> 
     <ignoredError sqref="K192 E181 E186" numberStoredAsText="1"/> 
    </ignoredErrors>  
</worksheet> 

ich irgendwo gelesen habe, dass dies nur in xlsx (dh OOXML), nicht in xls Format, das bedeutet, beibehalten wird, dass Wenn das Apache-POI-Team dies implementiert, befindet es sich im XSSF-Paket.

+0

Apache POI hat tatsächlich den Großteil der Low-Level-Unterstützung für diese Ignoranten sowohl für HSSF als auch für XSSF, es wartet nur darauf, dass jemand ein vernünftiges High-Level-API-Design entwickelt, um es in eine benutzerfreundlichere Form zu bringen. Bitte tragen Sie zu den Fehlern bei, wenn Sie an eine gute Möglichkeit denken können! – Gagravarr

+0

@ Gagravarr. Ja. Aber in OOXML ist es so verdammt einfach, dass keine Abstraktion IMHO benötigt wird. Sie würden nur eine neue Methode brauchen: 'XSSFSheet.setIgnoredErrors (Set x, Set y)' und dann vergessen, diese Funktion im XLS-Format zu unterstützen. Ich habe [RFE 58641] (https://issues.apache.org/bugzilla/show_bug.cgi?id=58641) hinzugefügt, um dies zu verfolgen. – peterh

0

Für mich keine der oben genannten Lösungen gearbeitet, aber am Ende wurde mit etwas gewundenen Abhilfe der Warnungen zu befreien: die Werte als Formeln wie dieser writting.

String asFormula = "\"" + value + "\""; 
cell.setCellType(SXSSFCell.CELL_TYPE_FORMULA); 
cell.setCellFormula(asFormula); 

Glauben Sie nicht, es ist immer eine gute Lösung ist, aber die Werte der Ausgabedatei in meinem Fall sind nie geändert. Aber es könnte jemandem helfen.

Ich benutze Version 3.14 von Apache POI, falls es einen Unterschied macht (Ich habe ein paar verschiedene Versionen vor der Problemumgehung, ohne Wirkung) versucht.