Java에서 Excel 파일 생성
자바에서 텍스트 파일을 쓰는 것처럼 엑셀 파일을 만들고 데이터를 쓰고 싶습니다.파일 확장자를 변경하려고 했습니다..txt
로..xls
하지만 엑셀 파일에는 굵은 글씨로 쓰고 싶습니다.내가 어떻게 그럴 수 있을까?
JXL API를 사용해 보았지만 라벨을 작성할 때마다 라벨을 추가하고 싶지 않습니다.테이블의 행과 열을 편집할 수 없습니까?
//Find jar from here "http://poi.apache.org/download.html"
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
public class CreateExlFile{
public static void main(String[]args) {
try {
String filename = "C:/NewExcelFile.xls" ;
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("FirstSheet");
HSSFRow rowhead = sheet.createRow((short)0);
rowhead.createCell(0).setCellValue("No.");
rowhead.createCell(1).setCellValue("Name");
rowhead.createCell(2).setCellValue("Address");
rowhead.createCell(3).setCellValue("Email");
HSSFRow row = sheet.createRow((short)1);
row.createCell(0).setCellValue("1");
row.createCell(1).setCellValue("Sankumarsingh");
row.createCell(2).setCellValue("India");
row.createCell(3).setCellValue("sankumarsingh@gmail.com");
FileOutputStream fileOut = new FileOutputStream(filename);
workbook.write(fileOut);
fileOut.close();
workbook.close();
System.out.println("Your excel file has been generated!");
} catch ( Exception ex ) {
System.out.println(ex);
}
}
}
Apache POI를 사용하여 기본 이진 xls 파일을 생성할 수 있습니다.
아니면 JexcelApi를 사용할 수도 있습니다.JexcelApi는 제가 기억하는 바로는 Java 라이브러리입니다.
Apache POI의 Excel 생성에 대한 적절한 경고...(오래된 게시물인 것은 알지만, 방금처럼 누군가가 다시 찾아보는 것이 중요합니다.)
메모리 누수 문제가 있었는데, 2006년에 해결된 것으로 추정되지만, 꽤 최근에 사람들이 아직도 이 문제를 겪고 있다.대량의 엑셀 생성을 자동화하고 싶은 경우(즉, 하나의 큰 파일, 다수의 작은 파일 또는 둘 다 생성하려는 경우) 다른 API를 사용하는 것이 좋습니다.또는 JVM 스택사이즈를 터무니없이 크게 늘리거나 실제로 많은 다른 스트링으로 작업하지 않는 것을 알고 있다면 인터닝 스트링을 검토할 수도 있습니다(물론, 스트링 인터닝은 다수의 다른 스트링이 있는 경우,완전히 다른 프로그램 실행 메모리 문제가 생길 수 있습니다.그 루트로 가기 전에 그 점을 고려해 주십시오).
File fileName = new File(".....\\Fund.xlsx");
public static void createWorkbook(File fileName) throws IOException {
try {
FileOutputStream fos = new FileOutputStream(fileName);
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("fund");
Row row = sheet.createRow(0);
Cell cell0 = row.createCell(0);
cell0.setCellValue("Nav Value");
Cell cell1 = row.createCell(1);
cell1.setCellValue("Amount Change");
Cell cell2 = row.createCell(2);
cell2.setCellValue("Percent Change");
workbook.write(fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
플랫 파일에서는 메타 정보를 제공할 수 없습니다.
당신이 필요한 정보를 담은 HTML 표를 작성하여 엑셀에게 읽어보라고 제안합니다.그런 다음 <b> 태그를 사용하여 원하는 작업을 수행할 수 있습니다.
엑셀 파일을 더 쉽게 만들 수 있도록 API를 만들었습니다.
인스턴스화 시 필요한 값을 설정하고 execute()를 호출하면 원하는 출력 디렉토리를 기반으로 생성됩니다.
그러나 이것을 사용하기 전에 새로 생성된 Excel 파일의 템플릿으로 사용할 Excel 템플릿이 있어야 합니다.
또한 프로젝트의 클래스 경로에 Apache POI가 필요합니다.
파일 확장자를 변경해도 파일 내용은 변경되지 않습니다.확장자는 레이블일 뿐입니다.
Java를 사용하여 Excel 스프레드시트로 작업하려면 Apache POI 라이브러리에서 읽어 보십시오.
JXLS도 사용했습니다.데이터를 올바른 구문을 가진 Map과 템플릿 EXCEL로 수신하여 올바르게 입력된 파일을 반환합니다.모든 셀의 데이터는 가시성 퍼블릭이 있는 JavaBean이어야 합니다.
1장 이상의 시트에 데이터를 삽입할 필요가 있는 경우에도 문제가 발생하지 않습니다.이 경우는 POI를 사용했습니다.
POI를 사용하여 스프레드시트를 만들고 셀을 포맷하려면 글꼴 작업 예를 참조하여 다음을 사용합니다.
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
POI는 매우 잘 작동합니다.VBA 매크로 작성 등 할 수 없는 작업이 몇 가지 있지만 매크로를 사용하여 스프레드시트를 읽고 쓸 수 있으므로 적절한 템플릿 시트를 만들고 POI를 사용하여 읽고 처리할 수 있습니다.
파일을 만들기 위해 "generator-excel
<dependency>
<groupId>com.github.bld-commons.excel</groupId>
<artifactId>generator-excel</artifactId>
<version>3.1.0</version>
</dependency>
이 라이브러리는 일련의 주석을 통해 스타일, 기능, 차트, 피벗 테이블 등을 구성할 수 있습니다.
파라미터를 사용하거나 사용하지 않고 쿼리를 통해 데이터 원본에서 데이터를 가져와 행을 작성할 수 있습니다.
입니다.
- 테이블의 행을 나타내는 클래스를 2개 만들었습니다.
- 시트를 나타내는 클래스를 2개 만들었습니다.
- 클래스 테스트, 테스트 기능에는 앙투아르 시트가 있습니다.
- 응용 프로그램 yaml
package bld.generator.report.junit.entity;
import java.util.Date;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import bld.generator.report.excel.RowSheet;
import bld.generator.report.excel.annotation.ExcelCellLayout;
import bld.generator.report.excel.annotation.ExcelColumn;
import bld.generator.report.excel.annotation.ExcelDate;
import bld.generator.report.excel.annotation.ExcelImage;
import bld.generator.report.excel.annotation.ExcelRowHeight;
@ExcelRowHeight(height = 3)
public class UtenteRow implements RowSheet {
@ExcelColumn(columnName = "Id", indexColumn = 0)
@ExcelCellLayout(horizontalAlignment = HorizontalAlignment.RIGHT)
private Integer idUtente;
@ExcelColumn(columnName = "Nome", indexColumn = 2)
@ExcelCellLayout
private String nome;
@ExcelColumn(columnName = "Cognome", indexColumn = 1)
@ExcelCellLayout
private String cognome;
@ExcelColumn(columnName = "Data di nascita", indexColumn = 3)
@ExcelCellLayout(horizontalAlignment = HorizontalAlignment.CENTER)
@ExcelDate
private Date dataNascita;
@ExcelColumn(columnName = "Immagine", indexColumn = 4)
@ExcelCellLayout
@ExcelImage(resizeHeight = 0.7, resizeWidth = 0.6)
private byte[] image;
@ExcelColumn(columnName = "Path", indexColumn = 5)
@ExcelCellLayout
@ExcelImage(resizeHeight = 0.7, resizeWidth = 0.6)
private String path;
public UtenteRow() {
}
public UtenteRow(Integer idUtente, String nome, String cognome, Date dataNascita) {
super();
this.idUtente = idUtente;
this.nome = nome;
this.cognome = cognome;
this.dataNascita = dataNascita;
}
public Integer getIdUtente() {
return idUtente;
}
public void setIdUtente(Integer idUtente) {
this.idUtente = idUtente;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public Date getDataNascita() {
return dataNascita;
}
public void setDataNascita(Date dataNascita) {
this.dataNascita = dataNascita;
}
public byte[] getImage() {
return image;
}
public String getPath() {
return path;
}
public void setImage(byte[] image) {
this.image = image;
}
public void setPath(String path) {
this.path = path;
}
}
package bld.generator.report.junit.entity;
import org.apache.poi.ss.usermodel.DataConsolidateFunction;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import bld.generator.report.excel.RowSheet;
import bld.generator.report.excel.annotation.ExcelCellLayout;
import bld.generator.report.excel.annotation.ExcelColumn;
import bld.generator.report.excel.annotation.ExcelFont;
import bld.generator.report.excel.annotation.ExcelSubtotal;
import bld.generator.report.excel.annotation.ExcelSubtotals;
@ExcelSubtotals(labelTotalGroup = "Total",endLabel = "total")
public class SalaryRow implements RowSheet {
@ExcelColumn(columnName = "Name", indexColumn = 0)
@ExcelCellLayout
private String name;
@ExcelColumn(columnName = "Amount", indexColumn = 1)
@ExcelCellLayout(horizontalAlignment = HorizontalAlignment.RIGHT)
@ExcelSubtotal(dataConsolidateFunction = DataConsolidateFunction.SUM,excelCellLayout = @ExcelCellLayout(horizontalAlignment = HorizontalAlignment.RIGHT,font=@ExcelFont(bold = true)))
private Double amount;
public SalaryRow() {
super();
}
public SalaryRow(String name, Double amount) {
super();
this.name = name;
this.amount = amount;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getAmount() {
return amount;
}
public void setAmount(Double amount) {
this.amount = amount;
}
}
package bld.generator.report.junit.entity;
import javax.validation.constraints.Size;
import bld.generator.report.excel.QuerySheetData;
import bld.generator.report.excel.annotation.ExcelHeaderLayout;
import bld.generator.report.excel.annotation.ExcelMarginSheet;
import bld.generator.report.excel.annotation.ExcelQuery;
import bld.generator.report.excel.annotation.ExcelSheetLayout;
@ExcelSheetLayout
@ExcelHeaderLayout
@ExcelMarginSheet(bottom = 1.5, left = 1.5, right = 1.5, top = 1.5)
@ExcelQuery(select = "SELECT id_utente, nome, cognome, data_nascita,image,path "
+ "FROM utente "
+ "WHERE cognome=:cognome "
+ "order by cognome,nome")
public class UtenteSheet extends QuerySheetData<UtenteRow> {
public UtenteSheet(@Size(max = 31) String sheetName) {
super(sheetName);
}
}
package bld.generator.report.junit.entity;
import javax.validation.constraints.Size;
import bld.generator.report.excel.SheetData;
import bld.generator.report.excel.annotation.ExcelHeaderLayout;
import bld.generator.report.excel.annotation.ExcelMarginSheet;
import bld.generator.report.excel.annotation.ExcelSheetLayout;
@ExcelSheetLayout
@ExcelHeaderLayout
@ExcelMarginSheet(bottom = 1.5,left = 1.5,right = 1.5,top = 1.5)
public class SalarySheet extends SheetData<SalaryRow> {
public SalarySheet(@Size(max = 31) String sheetName) {
super(sheetName);
}
}
package bld.generator.report.junit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import bld.generator.report.excel.BaseSheet;
import bld.generator.report.excel.GenerateExcel;
import bld.generator.report.excel.data.ReportExcel;
import bld.generator.report.junit.entity.AutoreLibriSheet;
import bld.generator.report.junit.entity.CasaEditrice;
import bld.generator.report.junit.entity.GenereSheet;
import bld.generator.report.junit.entity.SalaryRow;
import bld.generator.report.junit.entity.SalarySheet;
import bld.generator.report.junit.entity.TotaleAutoreLibriRow;
import bld.generator.report.junit.entity.TotaleAutoreLibriSheet;
import bld.generator.report.junit.entity.UtenteSheet;
import bld.generator.report.utils.ExcelUtils;
/**
* The Class ReportTest.
*/
@RunWith(SpringRunner.class)
@SpringBootTest
@ConfigurationProperties
@ComponentScan(basePackages = {"bld.generator","bld.read"})
@EnableTransactionManagement
public class ReportTestJpa {
/** The Constant PATH_FILE. */
private static final String PATH_FILE = "/mnt/report/";
/** The generate excel. */
@Autowired
private GenerateExcel generateExcel;
/**
* Sets the up.
*
* @throws Exception the exception
*/
@Before
public void setUp() throws Exception {
}
/**
* Test.
*
* @throws Exception the exception
*/
@Test
public void test() throws Exception {
List<BaseSheet> listBaseSheet = new ArrayList<>();
UtenteSheet utenteSheet=new UtenteSheet("Utente");
utenteSheet.getMapParameters().put("cognome", "Rossi");
listBaseSheet.add(utenteSheet);
CasaEditrice casaEditrice = new CasaEditrice("Casa Editrice","Mondadori", new GregorianCalendar(1955, Calendar.MAY, 10), "Roma", "/home/francesco/Documents/git-project/dev-excel/linux.jpg","Drammatico");
listBaseSheet.add(casaEditrice);
AutoreLibriSheet autoreLibriSheet = new AutoreLibriSheet("Libri d'autore","Test label");
TotaleAutoreLibriSheet totaleAutoreLibriSheet=new TotaleAutoreLibriSheet();
totaleAutoreLibriSheet.getListRowSheet().add(new TotaleAutoreLibriRow("Totale"));
autoreLibriSheet.setSheetFunctionsTotal(totaleAutoreLibriSheet);
listBaseSheet.add(autoreLibriSheet);
GenereSheet genereSheet=new GenereSheet("Genere");
listBaseSheet.add(genereSheet);
SalarySheet salarySheet=new SalarySheet("salary");
salarySheet.getListRowSheet().add(new SalaryRow("a",2.0));
salarySheet.getListRowSheet().add(new SalaryRow("a",2.0));
salarySheet.getListRowSheet().add(new SalaryRow("a",2.0));
salarySheet.getListRowSheet().add(new SalaryRow("a",2.0));
salarySheet.getListRowSheet().add(new SalaryRow("c",1.0));
salarySheet.getListRowSheet().add(new SalaryRow("c",1.0));
salarySheet.getListRowSheet().add(new SalaryRow("c",1.0));
salarySheet.getListRowSheet().add(new SalaryRow("c",1.0));
listBaseSheet.add(salarySheet);
ReportExcel excel = new ReportExcel("Mondadori JPA", listBaseSheet);
byte[] byteReport = this.generateExcel.createFileXlsx(excel);
ExcelUtils.writeToFile(PATH_FILE,excel.getTitle(), ".xlsx", byteReport);
}
}
logging:
level:
root: WARN
org:
springframework:
web: DEBUG
hibernate: ERROR
spring:
datasource:
url: jdbc:postgresql://localhost:5432/excel_db
username: ${EXCEL_USER_DB}
password: ${EXCEL_PASSWORD_DB}
jpa:
show-sql: true
properties:
hibernate:
default_schema: public
jdbc:
lob:
non_contextual_creation: true
format_sql: true
ddl-auto: auto
database-platform: org.hibernate.dialect.PostgreSQLDialect
generate-ddl: true
프로젝트 링크 아래 github:
저는 개인적으로 인텔리J IDEA와 함께 일하는데 좀 더 복잡한...생각합니다.
확장자: 및 Excel 파일을 작성하는 경우:CSV , .XLSX , .XLS 、 Apache Poi ( last version )를 다운로드해야 합니다.https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-5.1.0-20211024.zip
그런 다음 MAVEN 프로젝트를 만들고 pom.xml에서 종속성을 추가해야 합니다.https://www.tutorialspoint.com/maven/maven_external_dependencies.htm
여기 있어.효과가 있었습니다. 만족하시길 바랍니다!
잘 부탁드립니다, 탈라데가RS6
언급URL : https://stackoverflow.com/questions/1176080/create-excel-file-in-java
'source' 카테고리의 다른 글
Bash에서 명령어 출력의 첫 번째 단어를 검색하려면 어떻게 해야 합니까? (0) | 2023.04.12 |
---|---|
특정 커밋에 대한 리모트 리셋 (0) | 2023.04.12 |
아이폰 앱에서 NSError를 사용하려면 어떻게 해야 하나요? (0) | 2023.04.12 |
컴파일 경고: 아키텍처 i386의 파일을 처리하는 규칙이 없습니다. (0) | 2023.04.12 |
2차원 어레이를 기반으로 WPF 그리드를 채우는 방법 (0) | 2023.04.12 |