Generar archivos de Excel simples
En las oficinas reales, a menudo tenemos un requisito: requerimos que el informe se abra directamente en Excel. Existe tal necesidad durante las pasantías. Consulte toda la información del archivo adjunto proporcionado por el usuario en función del recurso seleccionado y genere Excel para descargar. Sin embargo, al consultar, debemos verificar si hay algún error en la información en el archivo adjunto proporcionado por el usuario (tarjeta de identificación). Hay un error de error de error Excel.
El proyecto POI de Apache es actualmente una interfaz HSSF relativamente madura utilizada para procesar objetos de Excel. De hecho, POI no solo maneja Excel, sino que también puede manejar Word, PowerPoint, Visio e incluso Outlook.
Aquí presentaré primero cómo generar Excel usando POI.
En primer lugar, antes de generar Excel, necesitamos comprender la organización de los archivos de Excel. En POI, se entiende de la siguiente manera: un archivo de Excel corresponde a un libro de trabajo, y un libro de trabajadores consta de varias hojas. Una hoja tiene múltiples filas, y una fila generalmente tiene múltiples celdas.
Para los cuatro sustantivos anteriores podemos entender en la figura a continuación
Para generar Excel, POI proporciona los siguientes objetos básicos:
De la imagen de arriba y la estructura organizativa de Excel, podemos entender los pasos para crear Excel.
1. Genere el objeto de documento HSSHWorkBook.
2. Genere el formulario HSSFSheet a través de HSSFWorkBook.
3. Genere filas a través de HSSFSheet
4. Genere la celda HSSFCell a través de HSSFROW.
Aquí está el código de visualización:
Error de la tarjeta de identidad Bean (ErrorCondition.java)
Class public ErrorCondition {Nombre de cadena privada; // Nombre de la cadena privada idcard; // Tarjeta de identificación Estado de cadena privada; // Mensaje de cadena privada de estado de error; // Mensaje de error ErrorCondition (name de cadena, cadena idcard, status status, string Mensaje) {this.name = name; this.idcard = idcard; this.status = status; this.message = Mensaje; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public String getIdCard () {return idcard; } public void setIdCard (String IdCard) {this.idCard = idcard; } public String getStatus () {Estado de retorno; } public void setStatus (status de cadena) {this.status = status; } public String getMessage () {Mensaje de retorno; } public void setMessage (mensaje de cadena) {this.message = mensaje; }}Clase de procesamiento (exporterRorexcel.java)
public class ExporterRorExcel {public static void main (String [] args) {// Paso 1 Crear libro de trabajo HSSFWorkBook wb = new HSSFWorkBook (); // Paso 2 Crear hoja hssfsheet hoja = wb.createSheet ("Mensaje de error de tarjeta de identificación"); // Paso 3 Crear fila de fila: agregue 0 filas de encabezado de tabla hssfrow row = sheet.createrow (0); Hssfcellstyle style = wb.createCellStyle (); style.setalignment (hssfcellstyle.align_center); // Centro // Paso 4: Crear celda HSSFCell Cell = Row.CreateCell (0); // la primera celda Cell.SetCellValue ("Nombre"); // establecer value cell.setCellStyle (estilo); // Center Content Cell = Row.CreateCell (1); // la segunda celda Cell.SetCellValue ("Tarjeta de identificación"); Cell.SetCellStyle (estilo); celda = fila.createCell (2); // la tercera celda Cell.SetCellValue ("Estado de error"); Cell.SetCellStyle (estilo); celular = fila.createCell (3); // La cuarta celda Cell.SetCellValue ("Mensaje de error"); Cell.SetCellStyle (estilo); // El quinto paso inserta la lista de datos <ErrorCondition> list = exporterRorExcel.getErrorCondition (); for (int i = 0; i <list.size (); i ++) {ErrorCondition ErrorCondition = list.get (i); // Crear fila = sheet.createrow (i+1); // Crear celda y agregar Data Row.CreateCell (0) .SetCellValue (ErrorCondition.getName ()); fila fila Row.CreateCell (3) .SetCellValue (ErrorCondition.getMessage ()); } // Paso 6 Guarde el archivo Excel generado en la ruta especificada Pruebe {FileOutputStream Fout = new FileOutputStream ("d: //errorcondition.xls"); wb.write (fout); fout.close (); } catch (ioException e) {E.PrintStackTrace (); } System.out.println ("Generación de archivos de Excel con éxito ..."); } Lista estática pública <ErrorCondition> getErrorCondition () {list <ErrorCondition> list = new ArrayList <ErrorCondition> (); ErrorCondition R1 = New ErrorCondition ("Zhang San", "4306821989021611", "l", "error de longitud"); ErrorCondition R2 = New ErrorCondition ("Li SI", "430682198902191112", "x", "verificación de error"); ErrorCondition r3 = new ErrorCondition ("Wang Wu", "", "n", "La información de la tarjeta de identidad está vacía"); list.add (r1); list.add (r2); list.add (R3); lista de devolución; }} A través de los seis pasos anteriores, puede generar archivos de Excel en la ubicación especificada.
La implementación de Java POI inserta imágenes en Excel
Hacer desarrollo web es inevitable para tratar con Excel. Hoy, el jefe me dio una tarea: Export Excel. Lo que pensé al principio era bastante simple, era solo buscar, construir Excel y descargar respuesta. Pero hay una diferencia, es decir, debe agregar imágenes, es esta que se ha agregado durante mucho tiempo. Al mismo tiempo, no se encontró buena información en Internet, así que escribí esta publicación de blog para grabarla para la mía y mis amigos de blog para consultar y hacer referencia.
Hay un objeto hssfpatriarch en POI, que es el mejor administrador para el dibujo. Su método CreatePicture (Anchor, PictureIndex) puede insertar una imagen en Excel. Por lo tanto, debe insertar una imagen en Excel y puede hacerlo en tres pasos. 1. Obtenga el objeto hssfpatriarch, 2. Nuevo objeto HSSFClientArchor, 3. Simplemente llame al método CreatePicture. La implementación es muy fácil de implementar, pero sigue siendo un poco difícil hacerlo bien. Aquí primero insertamos una imagen:
public class ExcelImageTest {public static void main (string [] args) {fileOutputStream fileout = null; Bufferedimage bufferimg = nulo; // Primero coloque la lectura en la imagen en un bytearRayOutputStream para generar bytearray try {bytearRayOutputStream bytearRayOut = new bytearRayOutputStream (); bufferimg = imageIO.Read (nuevo archivo ("f: /picture/anounty/xiaozhao11.jpg")); Imageio.write (bufferimg, "jpg", bytearRayout); Hssfworkbook wb = new HSSFWorkBook (); HSSFSheet Sheet1 = WB.CreateSheet ("Prest Test Picture"); // El administrador superior para el dibujo solo puede obtener una hoja (asegúrese de prestar atención a este punto) hssfpatriarch patriarch = sheet1.createDrawingpatriarch (); // El ancla se usa principalmente para establecer los atributos de las imágenes HSSFClientArChor Anchor = new HSSFClientArchor (0, 0, 255, 255, (corto) 1, 1, (corto) 5, 8); Anchor.SetAchortype (3); // inserta la imagen patriarch.createPicture (Anchor, wb.addpicture (bytearRayout.tobytearray (), hssfworkbook.picture_type_jpeg)); fileOut = nuevo FileOutputStream ("D:/Test Excel.xls"); // escribir en el archivo de Excel wb.write (fileOut); System.out.println ("--------"); } catch (Exception e) {E.PrintStackTrace (); } Finalmente {if (fileout! = null) {try {fileout.close (); } catch (ioException e) {E.PrintStackTrace (); }}}}}}}}}} Los siguientes son los resultados después de la ejecución:
En cuanto a por qué este resultado se debe principalmente al constructor HSSFClientArchor (0, 0, 255, 255, (corto) 1, 1, (corto) 5, 8). Permítanme explicar este constructor a continuación: HSSFClientArChor (Int DX1, Int Dy1, Int Dx2, Int DY2, Short Col1, Int Row1, Short Col2, Int Row2); Los significados de cada parámetro son los siguientes:
Aquí DX1 y DY1 definen la posición inicial de la imagen en la celda inicial, y DX2 y DY2 definen la posición final de la célula final. Col1 y Row1 definen la celda de inicio, COL2 y Row2 definen la célula final.
Lo siguiente se crea con dos constructores diferentes. A partir de esta imagen, podemos ver claramente el significado y las diferencias de los ocho parámetros anteriores.
Lo anterior es insertar una imagen, entonces, ¿qué hay de insertar múltiples imágenes? De hecho, es muy simple. Construya múltiples objetos diferentes de HSSFClientAnchor y controle esos ocho parámetros, de la siguiente manera:
HSSFClientArChor Anchor1 = nuevo HSSFClientArchor (0, 0, 1023,100, (corto) 1, 1, (corto) 5, 8); HSSFClientArChor Anchor2 = nuevo HSSFClientArChor (0, 0, 1023,100, (corto) 1, 9, (corto) 5, 16); // Inserte la imagen patriarch.createPicture (Anchor1, wb.addpicture (bytearRayout.tobytearray (), hssfworkbook.picture_type_jpeg)); Patriarch.CreatePicture (Anchor2, wb.addpicture (bytearRayout.tobytearray (), hssfworkbook.picture_type_jpeg));
El resto del código es el mismo, y se obtienen los siguientes resultados: