kongzy
2023-11-28 59d9ea33f503e363f2e2941c7c00cc9dd9d9d1c7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
package com.nanometer.smartlab.service;
 
import com.nanometer.smartlab.exception.BusinessException;
import com.nanometer.smartlab.exception.ExceptionEnumCode;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
import org.springframework.stereotype.Service;
 
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.net.URLEncoder;
 
 
@Service("accountInAndOutService")
public class AccountInAndOutServiceImpl implements AccountInAndOutService {
 
 
 
    @Override
    public void exportExcel(HttpServletResponse resp)  {
 
        try {
            // 创建文档对象
            HSSFWorkbook wb = new HSSFWorkbook();
            // 创建sheet对象
            HSSFSheet sheet = wb.createSheet("出入库 台账");
 
            sheet.setDefaultRowHeight((short) (20 * 20));
 
            //设置字体
            HSSFFont headFont = wb.createFont();
            headFont.setFontName("宋体");
            headFont.setFontHeightInPoints((short) 11);
            headFont.setBold(true);
            HSSFFont bodyFont = wb.createFont();
            bodyFont.setFontName("宋体");
            bodyFont.setFontHeightInPoints((short) 10);
 
 
            // 边框颜色和样式
            HSSFCellStyle defaultBorderStyle = wb.createCellStyle();
            defaultBorderStyle.setBorderBottom(BorderStyle.THIN);
            defaultBorderStyle.setBottomBorderColor(IndexedColors.BLACK.index);
            defaultBorderStyle.setBorderTop(BorderStyle.THIN);
            defaultBorderStyle.setTopBorderColor(IndexedColors.BLACK.index);
            defaultBorderStyle.setBorderLeft(BorderStyle.THIN);
            defaultBorderStyle.setLeftBorderColor(IndexedColors.BLACK.index);
            defaultBorderStyle.setBorderRight(BorderStyle.THIN);
            defaultBorderStyle.setRightBorderColor(IndexedColors.BLACK.index);
 
            // 默认字体和剧中
            HSSFCellStyle defaultStyle = wb.createCellStyle();
            defaultStyle.setFont(bodyFont);
            defaultStyle.setWrapText(true);
            defaultStyle.setAlignment(HorizontalAlignment.CENTER);
            defaultStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 
            // 默认标题头部样式
            HSSFCellStyle defaultHeadStyle = wb.createCellStyle();
            defaultHeadStyle.setFont(headFont);
            defaultHeadStyle.setWrapText(true);
            defaultHeadStyle.setAlignment(HorizontalAlignment.CENTER);
            defaultHeadStyle.setVerticalAlignment(VerticalAlignment.CENTER);
 
            // 固定列数和设置宽度
            int[] width = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10};
            for (int columnIndex = 0; columnIndex < width.length; columnIndex++) {
                sheet.setColumnWidth(columnIndex, width[columnIndex] * 256);
                sheet.setDefaultColumnStyle(columnIndex, defaultBorderStyle);
            }
 
 
            // exc
            // 0.数据准备
 
 
            // 1.创建表头
            this.createTableHead(sheet, defaultHeadStyle, defaultStyle, "", 0);
            // 2.创建数据行
            // 过滤出数据
//            this.createTableBody(sheet, defaultHeadStyle, defaultStyle, 3);
 
            // 返回文件
            String filename = "2022年易制毒出入库台账.xlsx";
            resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
            resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
            OutputStream outputStream = resp.getOutputStream();
            wb.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new BusinessException(ExceptionEnumCode.PARAM_ERR, "系统导出失败,请联系管理员");
        }
 
    }
 
 
 
 
    private void setBorder(CellRangeAddress region, HSSFSheet sheet){
        RegionUtil.setBorderBottom(BorderStyle.THIN, region, sheet);
        RegionUtil.setBorderTop(BorderStyle.THIN, region, sheet);
        RegionUtil.setBorderLeft(BorderStyle.THIN, region, sheet);
        RegionUtil.setBorderRight(BorderStyle.THIN, region, sheet);
    }
 
 
    private void createTableHead(HSSFSheet sheet, HSSFCellStyle defaultHeadStyle, HSSFCellStyle defaultStyle, String title, int i) {
 
        // 一月易制毒化学品出入库台账
        HSSFRow row0 = sheet.createRow(i);
        HSSFCell cell00 = row0.createCell(i);
        // 设置默认行高 不然 row 可以自定义
 
        cell00.setCellStyle(defaultHeadStyle);
        cell00.setCellValue("一月易制毒化学品出入库台账");
        CellRangeAddress cra = new CellRangeAddress(i, i, 0, 9);
        setBorder(cra, sheet);
        sheet.addMergedRegion(cra);
        // 品名:乙醚(单位:L)
        HSSFCell cell01 = row0.createCell(10);
        cell01.setCellStyle(defaultStyle);
        cell01.setCellValue("品名:乙醚(单位:L)");
        CellRangeAddress cra0 = new CellRangeAddress(i, i, 10, 13);
        setBorder(cra0, sheet);
        sheet.addMergedRegion(cra0);
        // 换行
        HSSFRow row1 = sheet.createRow(i + 1);
//            row1.setHeight((short) (20 * 20));
        // 日期
        HSSFCell cell10 = row1.createCell(0);
        cell10.setCellStyle(defaultStyle);
        cell10.setCellValue("日期");
        CellRangeAddress cra10 = new CellRangeAddress(i + 1, i + 2, 0, 0);
        setBorder(cra10, sheet);
        sheet.addMergedRegion(cra10);
        // 入库
        HSSFCell cell11 = row1.createCell(1);
        cell11.setCellStyle(defaultStyle);
        cell11.setCellValue("入库");
        CellRangeAddress address = new CellRangeAddress(i + 1, i + 1, 1, 5);
        setBorder(address, sheet);
        sheet.addMergedRegion(address);
 
        // 出库
        HSSFCell cell12 = row1.createCell(6);
        cell12.setCellStyle(defaultStyle);
        cell12.setCellValue("出库");
        CellRangeAddress cra12 = new CellRangeAddress(i + 1, i + 1, 6, 11);
        setBorder(cra12, sheet);
        sheet.addMergedRegion(cra12);
 
 
        // 库存数量
        HSSFCell cell13 = row1.createCell(12);
        cell13.setCellStyle(defaultStyle);
        cell13.setCellValue("库存数量");
        CellRangeAddress cra13 = new CellRangeAddress(i + 1, i + 2, 12, 13);
        setBorder(cra13, sheet);
        sheet.addMergedRegion(cra13);
 
 
        HSSFRow row2 = sheet.createRow(i + 2);
        // 入库数量
        HSSFCell cell21 = row2.createCell(1);
        cell21.setCellStyle(defaultStyle);
        cell21.setCellValue("入库数量");
 
        // 入库单号
        HSSFCell cell22 = row2.createCell(2);
        cell22.setCellStyle(defaultStyle);
        cell22.setCellValue("入库单号");
        CellRangeAddress cra22 = new CellRangeAddress(i + 2, i + 2, 2, 4);
        setBorder(cra22, sheet);
        sheet.addMergedRegion(cra22);
 
 
        // 保管员
        HSSFCell cell23 = row2.createCell(5);
        cell23.setCellStyle(defaultStyle);
        cell23.setCellValue("保管员");
 
        // 出库数量
        HSSFCell cell24 = row2.createCell(6);
        cell24.setCellStyle(defaultStyle);
        cell24.setCellValue("出库数量");
 
 
        // 领料单号
        HSSFCell cell25 = row2.createCell(7);
        cell25.setCellStyle(defaultStyle);
        cell25.setCellValue("领料单号");
        CellRangeAddress cra25 = new CellRangeAddress(i + 2, i + 2, 7, 9);
        setBorder(cra25, sheet);
        sheet.addMergedRegion(cra25);
 
        // 经手人
        HSSFCell cell26 = row2.createCell(10);
        cell26.setCellStyle(defaultStyle);
        cell26.setCellValue("经手人");
        CellRangeAddress cra26 = new CellRangeAddress(i + 2, i + 2, 10, 11);
        setBorder(cra26, sheet);
        sheet.addMergedRegion(cra26);
    }
 
}