實(shí)現(xiàn)方法如下:
(視頻教程推薦:java課程)
1、首先新建一個(gè)SpringBoot項(xiàng)目
2、導(dǎo)入依賴–pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.briup</groupId> <artifactId>demo3</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>demo3</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.6</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
3、建各種類
新建實(shí)體類
記得添加get/set方法
public class User { private String username; private String email; private String createTime; private String LastLoginTime; private String roleName; private String enable; public User() { super(); } }
新建接口Service
import java.util.List; public interface UserService { public List<User> findAllUser(); }
新建實(shí)現(xiàn)Service接口的Impl
import java.util.List; public class UserServiceImpl implements UserService { @Override public List<User> findAllUser() { User user = new User(); return null; } }
新建ExcelUtil工具類
import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class ExcelUtil { public static HSSFWorkbook getHSSFWorkbook(String sheetName,String sheetName1,String sheetName2, String []title, String[] content,String[] app){ // 第一步,創(chuàng)建一個(gè)HSSFWorkbook,對應(yīng)一個(gè)Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); // 第二步,在workbook中添加一個(gè)sheet,對應(yīng)Excel文件中的sheet HSSFSheet sheet = wb.createSheet(sheetName); HSSFSheet sheet1 = wb.createSheet(sheetName1); HSSFSheet sheet2 = wb.createSheet(sheetName2); // 第三步,在sheet中添加表頭第0行,注意老版本poi對Excel的行數(shù)列數(shù)有限制 HSSFRow row = sheet.createRow(0); HSSFRow row1 = sheet1.createRow(0); HSSFRow row2 = sheet2.createRow(0); // 第四步,創(chuàng)建單元格樣式,并設(shè)置值表頭 設(shè)置表頭居中 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 創(chuàng)建一個(gè)居中格式 //聲明單元格 HSSFCell cell = null; //創(chuàng)建標(biāo)題 for(int i=0;i<title.length;i++){ //創(chuàng)建一個(gè)單元格 cell = row.createCell(i); //給單元格賦值 cell.setCellValue(title[i]); //給單元格設(shè)置樣式 cell.setCellStyle(style); } //創(chuàng)建標(biāo)題 for(int i=0;i<title.length;i++){ //創(chuàng)建一個(gè)單元格 cell = row1.createCell(i); //給單元格賦值 cell.setCellValue(title[i]); //給單元格設(shè)置樣式 cell.setCellStyle(style); } //創(chuàng)建內(nèi)容 if (content != null && content.length > 0){ for(int i=0;i<content.length;i++){ row = sheet.createRow(i + 1); for(int j=0;j<content.length;j++){ //將內(nèi)容按順序賦給對應(yīng)的列對象 row.createCell(j).setCellValue(content[j]); } } } if (content != null && content.length > 0){ for(int i=0;i<content.length;i++){ row1 = sheet1.createRow(i + 1); for(int j=0;j<content.length;j++){ //將內(nèi)容按順序賦給對應(yīng)的列對象 row1.createCell(j).setCellValue(content[j]); } } } if (app != null && app.length > 0){ for(int i=0;i<app.length;i++){ row2 = sheet2.createRow(i + 1); for(int j=0;j<app.length;j++){ //將內(nèi)容按順序賦給對應(yīng)的列對象 row2.createCell(j).setCellValue(app[j]); } } } return wb; } }
新建Controller類
import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/MyTest") public class HelloController { @ResponseBody @RequestMapping("/hello") public void export(@RequestBody(required = false) User user,String username,HttpServletResponse response) throws Exception { if (user ==null && !StringUtils.isEmpty(username)){ //GET 請求的參數(shù) user = new User(); user.setUsername(username); } UserService userService = new UserServiceImpl(); //獲取數(shù)據(jù) List<User> list = userService.findAllUser(); //excel標(biāo)題 String[] title = {"姓名", "郵箱", "創(chuàng)建時(shí)間", "最近登錄時(shí)間","角色","是否可用"}; //excel文件名 String fileName = System.currentTimeMillis() + ".xls"; //sheet名 String sheetName = "用戶信息"; String sheetName1 = "hello"; String sheetName2 = "xixi"; //沒有數(shù)據(jù)就傳入null吧,Excel工具類有對null判斷 String[] content= {"ali","aaa","ddd","aaa","aaa","aaaa"}; String[] app= {"bbbb","bbbb","bbbb","bbbb","bbbb","bbbb",}; if (list != null && list.size() > 0){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < list.size(); i++) { User obj = list.get(i); content[1] = obj.getUsername(); content[1] = obj.getEmail(); content[2] = obj.getCreateTime() == null ? "" : sdf.format(obj.getCreateTime()); content[3] = obj.getLastLoginTime() == null ? "": sdf.format(obj.getLastLoginTime()); content[4] = obj.getRoleName(); } } if (list != null && list.size() > 0){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < list.size(); i++) { User obj = list.get(i); app[1] = obj.getUsername(); app[1] = obj.getEmail(); app[2] = obj.getCreateTime() == null ? "" : sdf.format(obj.getCreateTime()); app[3] = obj.getLastLoginTime() == null ? "": sdf.format(obj.getLastLoginTime()); app[4] = obj.getRoleName(); } } //創(chuàng)建HSSFWorkbook HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName,sheetName1,sheetName2, title, content,app); // HSSFWorkbook wb1 = ExcelUtil.getHSSFWorkbook(sheetName1, title, content); //響應(yīng)到客戶端 try { fileName = new String(fileName.getBytes(), "UTF-8"); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName); OutputStream os = response.getOutputStream(); wb.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); } } }
設(shè)置application.properties
server.port=8081
最重要的一定要注意:Application類一定要在最外側(cè)的包中?。。?/p>
4、最后訪問
localhost:8081/MyTest/hello
結(jié)果:
沒有寫前端,可以寫一個(gè)html,設(shè)置一個(gè)a標(biāo)簽,點(diǎn)擊事件。
相關(guān)推薦:java入門
Atas ialah kandungan terperinci java實(shí)現(xiàn)導(dǎo)出excel文件. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Terdapat tiga kaedah umum untuk melintasi Peta di Java: 1. Gunakan entriSet untuk mendapatkan kunci dan nilai pada masa yang sama, yang sesuai untuk kebanyakan senario; 2. Gunakan kekunci atau nilai untuk melintasi kekunci atau nilai masing -masing; 3. Gunakan Foreach Java8 untuk memudahkan struktur kod. EntrySet mengembalikan set set yang mengandungi semua pasangan nilai utama, dan setiap gelung mendapat objek peta.Entry, sesuai untuk akses kerap ke kunci dan nilai; Jika hanya kekunci atau nilai yang diperlukan, anda boleh memanggil kekunci () atau nilai () masing -masing, atau anda boleh mendapatkan nilai melalui map.get (kunci) apabila melintasi kunci; Java 8 boleh menggunakan foreach ((kunci, nilai)-& gt

Pilihan dapat jelas menyatakan niat dan mengurangkan bunyi kod untuk penghakiman null. 1. Pilihan.Ofnullable adalah cara biasa untuk menangani objek null. Sebagai contoh, apabila mengambil nilai dari peta, Orelse boleh digunakan untuk memberikan nilai lalai, supaya logik lebih jelas dan ringkas; 2. Gunakan panggilan rantaian peta untuk mencapai nilai bersarang untuk menghindari NPE dengan selamat, dan secara automatik menamatkan jika ada pautan adalah null dan mengembalikan nilai lalai; 3. Penapis boleh digunakan untuk penapisan bersyarat, dan operasi seterusnya akan terus dilakukan hanya jika syarat -syarat dipenuhi, jika tidak, ia akan melompat terus ke Orelse, yang sesuai untuk penghakiman perniagaan ringan; 4. Ia tidak disyorkan untuk menggunakan terlalu banyak pilihan, seperti jenis asas atau logik mudah, yang akan meningkatkan kerumitan, dan beberapa senario akan terus kembali ke NU.

Penyelesaian teras untuk menghadapi java.io.notserializableException adalah untuk memastikan bahawa semua kelas yang perlu bersiri melaksanakan antara muka berseri dan periksa sokongan serialisasi objek bersarang. 1. Tambah implementsSerializable ke kelas utama; 2. Pastikan kelas medan tersuai yang sepadan di dalam kelas juga melaksanakan bersiri; 3. Gunakan sementara untuk menandakan medan yang tidak perlu bersiri; 4. Periksa jenis yang tidak berseri dalam koleksi atau objek bersarang; 5. Semak kelas mana yang tidak melaksanakan antara muka; 6. Pertimbangkan reka bentuk pengganti untuk kelas yang tidak dapat diubah suai, seperti menyimpan data utama atau menggunakan struktur pertengahan berseri; 7. Pertimbangkan untuk mengubah suai

Di Java, setanding digunakan untuk menentukan peraturan penyortiran lalai secara dalaman, dan komparator digunakan untuk menentukan pelbagai logik penyortiran secara luaran. 1.Sampar adalah antara muka yang dilaksanakan oleh kelas itu sendiri. Ia mentakrifkan susunan semula jadi dengan menulis semula kaedah CompareTo (). Ia sesuai untuk kelas dengan kaedah penyortiran tetap dan paling biasa digunakan, seperti rentetan atau integer. 2. Sempadan adalah antara muka fungsional yang ditakrifkan secara luaran, dilaksanakan melalui kaedah membandingkan (), sesuai untuk situasi di mana kaedah penyortiran berganda diperlukan untuk kelas yang sama, kod sumber kelas tidak dapat diubah suai, atau logik penyortiran sering diubah. Perbezaan antara keduanya adalah setanding yang hanya dapat menentukan logik penyortiran dan perlu mengubah suai kelas itu sendiri, sementara perbandingan

Rujukan kaedah adalah cara untuk memudahkan penulisan ekspresi Lambda di Java, menjadikan kod lebih ringkas. Ia bukan sintaks baru, tetapi pintasan kepada ekspresi lambda yang diperkenalkan oleh Java 8, sesuai untuk konteks antara muka berfungsi. Inti adalah menggunakan kaedah sedia ada secara langsung sebagai pelaksanaan antara muka berfungsi. Sebagai contoh, System.out :: Println bersamaan dengan S-> System.out.println (s). Terdapat empat bentuk utama rujukan kaedah: 1. Rujukan Kaedah Statik (ClassName :: StaticMethodName); 2. Rujukan kaedah contoh (mengikat objek tertentu, contoh :: methodname); 3.

Untuk menangani masalah pengekodan watak di Java, kunci adalah dengan jelas menentukan pengekodan yang digunakan pada setiap langkah. 1. Sentiasa tentukan pengekodan apabila membaca dan menulis teks, gunakan InputStreamReader dan OutputStreamWriter dan lulus dalam set aksara yang jelas untuk mengelakkan bergantung pada pengekodan lalai sistem. 2. Pastikan kedua-dua hujungnya konsisten apabila memproses rentetan pada sempadan rangkaian, tetapkan tajuk jenis kandungan yang betul dan secara jelas menentukan pengekodan dengan perpustakaan. 3. Gunakan string.getBytes () dan newstring (byte []) dengan berhati -hati, dan sentiasa secara manual menentukan standardCharsets.utf_8 untuk mengelakkan rasuah data yang disebabkan oleh perbezaan platform. Pendek kata, oleh

Terdapat tiga cara biasa untuk menghuraikan JSON di Java: Gunakan Jackson, Gson, atau Org.json. 1. Jackson sesuai untuk kebanyakan projek, dengan prestasi yang baik dan fungsi yang komprehensif, dan menyokong pemetaan penukaran dan anotasi antara objek dan rentetan JSON; 2. GSON lebih sesuai untuk projek Android atau keperluan ringan, dan mudah digunakan tetapi sedikit lebih rendah dalam mengendalikan struktur kompleks dan senario berprestasi tinggi; 3.org.json sesuai untuk tugas mudah atau skrip kecil, dan tidak disyorkan untuk projek besar kerana kekurangan fleksibiliti dan keselamatan jenisnya. Pilihan harus diputuskan berdasarkan keperluan sebenar.

Bagaimana untuk membuat e -mel baru dengan cepat di Outlook adalah seperti berikut: 1. Versi desktop menggunakan kekunci pintasan Ctrl Shift M untuk terus muncul tetingkap e -mel baru; 2. Versi web boleh membuat e-mel baru dalam satu klik dengan membuat penanda buku yang mengandungi JavaScript (seperti JavaScript: Document.QuerySelector ("Divrole = 'Button'"). Klik ()); 3. Gunakan pemalam pelayar (seperti vimium, crxmouseGestures) untuk mencetuskan butang "mel baru"; 4. Pengguna Windows juga boleh memilih "mel baru" dengan mengklik kanan ikon Outlook bar tugas
