java Apache POI excel导出,文件没有出来,浏览器请求地址的preview全是乱码
时间: 2024-02-18 11:00:50 浏览: 62
这个问题可能是由于文件编码问题导致的。当浏览器请求下载文件时,请求地址后面的 preview 参数会指定预览文件的编码方式,如果编码方式不正确,就会导致下载的文件无法正常显示。
你可以尝试以下解决方法:
1. 确认文件编码方式是否正确,可以使用 UTF-8 编码方式来生成文件。
2. 确认浏览器是否支持请求的编码方式,可以尝试使用其他浏览器或升级浏览器版本。
3. 确认服务器是否正确设置编码方式,可以检查服务器的字符集设置是否正确。
4. 如果是使用 SpringMVC 等框架导出 Excel 文件,可以在控制器中设置 HttpServletResponse 的字符集和文件类型,例如:
```
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
```
如果以上方法都无法解决问题,你可以将代码和报错信息提供给开发团队或相关论坛,寻求更具体的帮助。
相关问题
java POI导出Excel文件下载 完整代码
好的,以下是一个完整的 Java POI 导出 Excel 文件并下载的示例代码:
```java
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelExportUtil {
public static void export(HttpServletResponse response) throws IOException {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("Sheet1");
// 添加表头行
Row headerRow = sheet.createRow(0);
Cell headerCell1 = headerRow.createCell(0);
headerCell1.setCellValue("Name");
Cell headerCell2 = headerRow.createCell(1);
headerCell2.setCellValue("Age");
// 添加数据行
List<Person> personList = getPersonList();
for (int i = 0; i < personList.size(); i++) {
Person person = personList.get(i);
Row row = sheet.createRow(i + 1);
Cell cell1 = row.createCell(0);
cell1.setCellValue(person.getName());
Cell cell2 = row.createCell(1);
cell2.setCellValue(person.getAge());
}
// 设置响应头,告诉浏览器下载文件
response.setHeader("Content-Disposition", "attachment;filename=example.xlsx");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
// 将工作簿写入响应输出流
workbook.write(response.getOutputStream());
// 关闭工作簿
workbook.close();
}
private static List<Person> getPersonList() {
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 20));
personList.add(new Person("Bob", 25));
personList.add(new Person("Charlie", 30));
return personList;
}
private static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
```
这段代码定义了一个名为 `ExcelExportUtil` 的类,其中包含了一个名为 `export` 的静态方法,用于导出 Excel 文件并下载。在 `export` 方法中,首先创建了一个工作簿对象 `workbook`,然后创建了一个工作表对象 `sheet`,并向其中添加了表头行和数据行。最后将工作簿写入响应输出流,并设置响应头,告诉浏览器下载文件。
在 `getPersonList` 方法中,定义了一个名为 `Person` 的内部类,用于存储人员信息。在示例代码中,生成了一个包含三个人员信息的列表。
如果需要调用上述代码,可以在 Servlet 或者 Spring MVC 的控制器中使用以下代码:
```java
@RequestMapping("/download")
public void download(HttpServletResponse response) throws IOException {
ExcelExportUtil.export(response);
}
```
其中 `"/download"` 是一个映射到下载方法的 URL。这段代码会调用 `ExcelExportUtil` 类的静态方法 `export`,并将响应对象 `response` 传递给它。需要注意的是,需要将 `HttpServletResponse` 对象作为参数传递给 `export` 方法,以便将 Excel 文件写入响应输出流。
java excel导出千位符,使用Apache POI在Excel千位分隔符格式号码
可以使用Apache POI中的DataFormat类来设置Excel中的数字格式。以下是设置千位分隔符格式的代码示例:
```java
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.text.DecimalFormat;
public class ExcelExportUtil {
public static void exportExcel() throws Exception {
Workbook workbook = new XSSFWorkbook(); // 创建工作簿
Sheet sheet = workbook.createSheet("Sheet1"); // 创建工作表
// 创建单元格样式
CellStyle cellStyle = workbook.createCellStyle();
DataFormat dataFormat = workbook.createDataFormat();
cellStyle.setDataFormat(dataFormat.getFormat("#,##0"));
// 创建行和单元格
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
// 设置单元格值和格式
double value = 123456789.123;
cell.setCellValue(value);
cell.setCellStyle(cellStyle);
// 将Excel写入文件
FileOutputStream outputStream = new FileOutputStream("test.xlsx");
workbook.write(outputStream);
workbook.close();
}
}
```
在这个示例中,我们使用了`DecimalFormat`来格式化数字,并使用`DataFormat`类的`getFormat`方法来创建一个带有千位分隔符的数字格式。然后,我们将此格式应用于单元格样式中的单元格。最后,我们将Excel文件写入磁盘。