精华内容
下载资源
问答
  • 已有一组Excel表格数据,使用VBA快速批量建文件夹 不知道标题怎么写。 已经有了这样一组数据 然后需要根据这两组数据新建文件夹,代码如下 Sub 建文件夹() Dim i As Integer '用于下方数组 Dim Arr1(), Arr2() ...

    已有一组Excel表格数据,使用VBA快速批量建文件夹

    不知道标题怎么写。
    已经有了这样一组数据
    在这里插入图片描述



    然后需要根据这两组数据新建文件夹,代码如下

    Sub 建文件夹()
        Dim i As Integer '用于下方数组
        Dim Arr1(), Arr2() '定义一个数组,不能定义大小和类型
        Dim Fso, Fld    '定义文件路径
        Dim rowmax  '找到数据的行数
        
        start_time = Timer  '计时开始
        
    '数据的行数
        rowmax = [A1048576].End(xlUp).Row
    '把两列数据分别赋值给两个个数组
        Arr1 = Range("A2:A" & rowmax)
        Arr2 = Range("B2:B" & rowmax)
    '选择建文件夹的路径
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set Fld = Fso.getfolder(CreateObject("Shell.Application").BrowseForFolder(0, "请选择需要创建文件夹的根目录", 0, "").Self.Path & "")
    
    '开始批量新建文件夹
        For i = 1 To UBound(Arr1)
            FolderName = Arr1(i, 1) & " " & Arr2(i, 1)
            If Dir(Fld & "\" & FolderName, vbDirectory) = vbNullString Then  '如果文件夹不存在,则新建
            VBA.MkDir (Fld & "\" & FolderName)
            End If
        Next    
    '建好了
    
        cost_time = Timer - start_time  '计时结束,计算用时
        Range("D6") = cost_time
    End Sub 
    

    完成
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 之前从网上找的没有定义样式,各种写法都有,还有多级表头整理了一下再里面了

    第一:安装依赖

    npm install -S file-saver xlsx
    npm install -D script-loader
    npm install -D xlsx-style (自定义样式)

    第二:在目录里新建excel文件夹在这里插入图片描述
    在excel文件夹里新建两个js文件(Blob.js和Export2Excel.js)
    Blob.js

    /* eslint-disable */
    /* Blob.js
     * A Blob implementation.
     * 2014-05-27
     *
     * By Eli Grey, http://eligrey.com
     * By Devin Samarin, https://github.com/eboyjr
     * License: X11/MIT
     *   See LICENSE.md
     */
     
    /*global self, unescape */
    /*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
     plusplus: true */
     
    /*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */
     
    (function (view) {
        "use strict";
     
        view.URL = view.URL || view.webkitURL;
     
        if (view.Blob && view.URL) {
            try {
                new Blob;
                return;
            } catch (e) {}
        }
     
        // Internally we use a BlobBuilder implementation to base Blob off of
        // in order to support older browsers that only have BlobBuilder
        var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function(view) {
                var
                    get_class = function(object) {
                        return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1];
                    }
                    , FakeBlobBuilder = function BlobBuilder() {
                        this.data = [];
                    }
                    , FakeBlob = function Blob(data, type, encoding) {
                        this.data = data;
                        this.size = data.length;
                        this.type = type;
                        this.encoding = encoding;
                    }
                    , FBB_proto = FakeBlobBuilder.prototype
                    , FB_proto = FakeBlob.prototype
                    , FileReaderSync = view.FileReaderSync
                    , FileException = function(type) {
                        this.code = this[this.name = type];
                    }
                    , file_ex_codes = (
                        "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR "
                        + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR"
                    ).split(" ")
                    , file_ex_code = file_ex_codes.length
                    , real_URL = view.URL || view.webkitURL || view
                    , real_create_object_URL = real_URL.createObjectURL
                    , real_revoke_object_URL = real_URL.revokeObjectURL
                    , URL = real_URL
                    , btoa = view.btoa
                    , atob = view.atob
     
                    , ArrayBuffer = view.ArrayBuffer
                    , Uint8Array = view.Uint8Array
                    ;
                FakeBlob.fake = FB_proto.fake = true;
                while (file_ex_code--) {
                    FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1;
                }
                if (!real_URL.createObjectURL) {
                    URL = view.URL = {};
                }
                URL.createObjectURL = function(blob) {
                    var
                        type = blob.type
                        , data_URI_header
                        ;
                    if (type === null) {
                        type = "application/octet-stream";
                    }
                    if (blob instanceof FakeBlob) {
                        data_URI_header = "data:" + type;
                        if (blob.encoding === "base64") {
                            return data_URI_header + ";base64," + blob.data;
                        } else if (blob.encoding === "URI") {
                            return data_URI_header + "," + decodeURIComponent(blob.data);
                        } if (btoa) {
                            return data_URI_header + ";base64," + btoa(blob.data);
                        } else {
                            return data_URI_header + "," + encodeURIComponent(blob.data);
                        }
                    } else if (real_create_object_URL) {
                        return real_create_object_URL.call(real_URL, blob);
                    }
                };
                URL.revokeObjectURL = function(object_URL) {
                    if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) {
                        real_revoke_object_URL.call(real_URL, object_URL);
                    }
                };
                FBB_proto.append = function(data/*, endings*/) {
                    var bb = this.data;
                    // decode data to a binary string
                    if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) {
                        var
                            str = ""
                            , buf = new Uint8Array(data)
                            , i = 0
                            , buf_len = buf.length
                            ;
                        for (; i < buf_len; i++) {
                            str += String.fromCharCode(buf[i]);
                        }
                        bb.push(str);
                    } else if (get_class(data) === "Blob" || get_class(data) === "File") {
                        if (FileReaderSync) {
                            var fr = new FileReaderSync;
                            bb.push(fr.readAsBinaryString(data));
                        } else {
                            // async FileReader won't work as BlobBuilder is sync
                            throw new FileException("NOT_READABLE_ERR");
                        }
                    } else if (data instanceof FakeBlob) {
                        if (data.encoding === "base64" && atob) {
                            bb.push(atob(data.data));
                        } else if (data.encoding === "URI") {
                            bb.push(decodeURIComponent(data.data));
                        } else if (data.encoding === "raw") {
                            bb.push(data.data);
                        }
                    } else {
                        if (typeof data !== "string") {
                            data += ""; // convert unsupported types to strings
                        }
                        // decode UTF-16 to binary string
                        bb.push(unescape(encodeURIComponent(data)));
                    }
                };
                FBB_proto.getBlob = function(type) {
                    if (!arguments.length) {
                        type = null;
                    }
                    return new FakeBlob(this.data.join(""), type, "raw");
                };
                FBB_proto.toString = function() {
                    return "[object BlobBuilder]";
                };
                FB_proto.slice = function(start, end, type) {
                    var args = arguments.length;
                    if (args < 3) {
                        type = null;
                    }
                    return new FakeBlob(
                        this.data.slice(start, args > 1 ? end : this.data.length)
                        , type
                        , this.encoding
                    );
                };
                FB_proto.toString = function() {
                    return "[object Blob]";
                };
                FB_proto.close = function() {
                    this.size = this.data.length = 0;
                };
                return FakeBlobBuilder;
            }(view));
     
        view.Blob = function Blob(blobParts, options) {
            var type = options ? (options.type || "") : "";
            var builder = new BlobBuilder();
            if (blobParts) {
                for (var i = 0, len = blobParts.length; i < len; i++) {
                    builder.append(blobParts[i]);
                }
            }
            return builder.getBlob(type);
        };
    }(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this));
    

    Export2Excel.js:

    /* eslint-disable */
    require('script-loader!file-saver');
    require('./Blob');
    require('script-loader!xlsx/dist/xlsx.core.min');
    import XLSX from 'xlsx-style';
    function generateArray(table) {
    	var out = [];
    	var rows = table.querySelectorAll('tr');
    	var ranges = [];
    	for (var R = 0; R < rows.length; ++R) {
    		var outRow = [];
    		var row = rows[R];
    		var columns = row.querySelectorAll('td');
    		for (var C = 0; C < columns.length; ++C) {
    			var cell = columns[C];
    			var colspan = cell.getAttribute('colspan');
    			var rowspan = cell.getAttribute('rowspan');
    			var cellValue = cell.innerText;
    			if (cellValue !== '' && cellValue == +cellValue) cellValue = +cellValue;
    
    			//Skip ranges
    			ranges.forEach(function(range) {
    				if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
    					for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
    				}
    			});
    
    			//Handle Row Span
    			if (rowspan || colspan) {
    				rowspan = rowspan || 1;
    				colspan = colspan || 1;
    				ranges.push({
    					s: { r: R, c: outRow.length },
    					e: { r: R + rowspan - 1, c: outRow.length + colspan - 1 }
    				});
    			}
    			//Handle Value
    			outRow.push(cellValue !== '' ? cellValue : null);
    
    			//Handle Colspan
    			if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
    		}
    		out.push(outRow);
    	}
    	return [ out, ranges ];
    }
    
    function datenum(v, date1904) {
    	if (date1904) v += 1462;
    	var epoch = Date.parse(v);
    	return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
    }
    
    const defaultCellStyle = {
    	font: {
    		name: "微软雅黑", sz: 12, color: { auto: 1 } ,
    	},
    	border: {
    		color: { auto: 1 },
    	   top: { style: 'thin' },
    	   bottom: { style: 'thin'},
    	   left: { style: 'thin' },
    	   right: { style: 'thin' }
    	},
    	alignment: {
    		/// 自动换行
    		wrapText: 1,
    			// 居中
    		horizontal: "center",
    		vertical: "center",
    		indent: 0
    	}
    };
    
    function sheet_from_array_of_arrays(data, opts) {
    	var ws = {};
    	var range = { s: { c: 10000000, r: 10000000 }, e: { c: 0, r: 0 } };
    	for (var R = 0; R != data.length; ++R) {
    		for (var C = 0; C != data[R].length; ++C) {
    			if (range.s.r > R) range.s.r = R;
    			if (range.s.c > C) range.s.c = C;
    			if (range.e.r < R) range.e.r = R;
    			if (range.e.c < C) range.e.c = C;
    			// var cell = { v: data[R][C] };
    			/// 这里生成cell的时候,使用上面定义的默认样式
    			const cell = {v: data[R][C], s: defaultCellStyle};
    			if (cell.v == null) continue;
    			var cell_ref = XLSX.utils.encode_cell({ c: C, r: R });
    
    			if (typeof cell.v === 'number') cell.t = 'n';
    			else if (typeof cell.v === 'boolean') cell.t = 'b';
    			else if (cell.v instanceof Date) {
    				cell.t = 'n';
    				cell.z = XLSX.SSF._table[14];
    				cell.v = datenum(cell.v);
    			} else cell.t = 's';
    
    			ws[cell_ref] = cell;
    		}
    	}
    	if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
    	return ws;
    }
    
    function Workbook() {
    	if (!(this instanceof Workbook)) return new Workbook();
    	this.SheetNames = [];
    	this.Sheets = {};
    }
    
    function s2ab(s) {
    	var buf = new ArrayBuffer(s.length);
    	var view = new Uint8Array(buf);
    	for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
    	return buf;
    }
    
    export function export_table_to_excel(id) {
    	var theTable = document.getElementById(id);
    	console.log('a');
    	var oo = generateArray(theTable);
    	var ranges = oo[1];
    
    	/* original data */
    	var data = oo[0];
    	var ws_name = 'SheetJS';
    	console.log(data);
    
    	var wb = new Workbook(),
    		ws = sheet_from_array_of_arrays(data);
    
    	/* add ranges to worksheet */
    	// ws['!cols'] = ['apple', 'banan'];
    	ws['!merges'] = ranges;
    
    	/* add worksheet to workbook */
    	wb.SheetNames.push(ws_name);
    	wb.Sheets[ws_name] = ws;
    
    	var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
    
    	saveAs(new Blob([ s2ab(wbout) ], { type: 'application/octet-stream' }), 'test.xlsx');
    }
    
    function formatJson(jsonData) {
    	console.log(jsonData);
    }
    export function export_json_to_excel(th, jsonData, defaultTitle) {
    	/* original data */
    
    	var data = jsonData;
    	data.unshift(th);
    	var ws_name = 'SheetJS';
    
    	var wb = new Workbook(),
    		ws = sheet_from_array_of_arrays(data);
    
    	/*设置worksheet每列的最大宽度*/
    	const colWidth = data.map((row) =>
    		row.map((val) => {
    			/*先判断是否为null/undefined*/
    			if (val == null) {
    				return { wch: 10 };
    			} else if (val.toString().charCodeAt(0) > 255) {
    				/*再判断是否为中文*/
    				return { wch: val.toString().length * 2 };
    			} else {
    				return { wch: val.toString().length };
    			}
    		})
    	);
    	/*以第一行为初始值*/
    	let result = colWidth[0];
    	colWidth[0][0]['wch'] = 10;
    	for (let i = 1; i < colWidth.length; i++) {
    		for (let j = 0; j < colWidth[i].length; j++) {
    			if (result[j]['wch'] < colWidth[i][j]['wch']) {
    				result[j]['wch'] = colWidth[i][j]['wch'];
    			}
    		}
    	}
    	ws['!cols'] = result;
    
    	/* add worksheet to workbook */
    	wb.SheetNames.push(ws_name);
    	wb.Sheets[ws_name] = ws;
    
    	// const borderAll = {
    	// 	//单元格外侧框线
    	// 	top: { style: 'thin' },
    	// 	bottom: { style: 'thin' },
    	// 	left: { style: 'thin' },
    	// 	right: { style: 'thin' }
    	// };
    	// data['!cols'] = [];
    	// for (let key in data) {
    	// 	if (data[key] instanceof Object) {
    	// 		data[key].s = {
    	// 			border: borderAll,
    	// 			alignment: {
    	// 				horizontal: 'center', //水平居中对齐
    	// 				vertical: 'center'
    	// 			},
    	// 			font: { sz: 12 },
    	// 			bold: true,
    	// 			numFmt: 0
    	// 		};
    	// 		data['!cols'].push({ wpx: 115 });
    	// 	}
    	// 	// console.log(1)
    	// }
    
    	var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' });
    	var title = defaultTitle || '列表';
    	saveAs(new Blob([ s2ab(wbout) ], { type: 'application/octet-stream' }), title + '.xlsx');
    }
    
    

    util.js(我是建在utils文件夹)

    export function export2Excel(columns,list,calName){
        require.ensure([], () => {
            const { export_json_to_excel } = require('../excel/Export2Excel');  // 注意路径
            let tHeader = []
            let filterVal = []
            // console.log(columns)
            if(!columns){
                return;
            }
            columns.forEach(item =>{
                tHeader.push(item.title)
                filterVal.push(item.key)
            })
            const data = list.map(v => filterVal.map(j => v[j]))
            export_json_to_excel(tHeader, data, calName);
        })
    }
    

    第四:在需要的页面import引入

    import { export2Excel } from '../utils/util'
    

    第五:点击导出

    ps 多级表头导出
    Export2Excel.js:同样的 就是最后一个方法不同

    export function export_json_to_excel ({
      title,//标题
      multiHeader = [],
      header,//表头 格式:[[],[]]多级菜单,从下往上
      data,//格式后的数据
      filename,//表名
      merges = [],//需要合并的单元格 格式:[[],[]]
      autoWidth = true,
      bookType = 'xlsx'
    } = {}) {
      /* original data */
      //判断是否有表名、没有则赋予固定表名
      filename = filename || 'excel-list'
      //获取所有数据
      data = [...data]
      //添加表头进数据最上层
      header.forEach(element => {
        data.unshift(element);
      });
      //添加标题进数据最上层  在表头之上
      data.unshift(title);
      //判断multiHeader是否有值(原作为标题后修改的值)
      for (let i = multiHeader.length - 1; i > -1; i--) {
        data.unshift(multiHeader[i])
      }
    
      var ws_name = "SheetJS";
      var wb = new Workbook(),
        //将data转化格式 用于接下来动态宽度
        ws = sheet_from_array_of_arrays(data);
    
      //合并单元格
      if (merges.length > 0) {
        if (!ws['!merges']) ws['!merges'] = [];
        merges.forEach(a => {
          a.forEach(item => {
            ws['!merges'].push(XLSX.utils.decode_range(item))
          })
        })
      }
      //动态设置宽度
      if (autoWidth) {
       console.log(1)
      }
       /*设置worksheet每列的最大宽度*/
       const colWidth = data.map(row => row.map(val => {
        /*先判断是否为null/undefined*/
        if (val == null) {
          return {
            'wch': 13
          };
        }
        /*再判断是否为中文*/
        else if (val.toString().charCodeAt(0) > 255) {
          return {
            'wch': val.toString().length * 2
          };
        } else {
          return {
            'wch': val.toString().length
          };
        }
      }))
      //判断合并单元格中是否有同行合并,有则将其长度设为0
      if (merges.length > 0) {
        if (!ws['!merges']) ws['!merges'] = [];
        merges.forEach(a => {
          a.forEach(item => {
            let q = item.split(':')
            let w1 = q[0].substring(0, 1)
            let e1 = q[0].substring(1, 2)
            let w2 = q[1].substring(0, 1)
            let e2 = q[1].substring(1, 2)
            if (e1 == e2) {
              let abc = {
                "A": 0, "B": 1, "C": 2, "D": 3, "E": 4, "F": 5, "G": 6, "H": 7, "I": 8, "J": 9,
                "K": 10, "L": 11, "M": 12, "N": 13, "O": 14, "P": 15, "Q": 16, "R": 17, "S": 18, "T": 19, "U": 20,
                "V": 21, "W": 22, "X": 23, "Y": 24, "Z": 25
              };
              if (abc[w1] > abc[w2]) {
                let jh = w1
                w1 = w2
                w2 = jh
              }
              for (let i = abc[w1]; i <= abc[w2]; i++) {
                colWidth[e1 - 1][i]['wch'] = 0;
              }
            }
          })
        })
      }
      /*以第一行为初始值 判断对应每一列的最大长度*/
      let result = colWidth[0];
      for (let i = 1; i < colWidth.length; i++) {
        for (let j = 0; j < colWidth[i].length; j++) {
          if (result[j]['wch'] < colWidth[i][j]['wch']) {
            result[j]['wch'] = colWidth[i][j]['wch'];
          }
        }
      }
      ws['!cols'] = result;
    
      /* add worksheet to workbook */
      wb.SheetNames.push(ws_name);
      wb.Sheets[ws_name] = ws;
      var dataInfo = wb.Sheets[wb.SheetNames[0]];
    
      const borderAll = {  //单元格外侧框线
        top: {
          style: 'thin'
        },
        bottom: {
          style: 'thin'
        },
        left: {
          style: 'thin'
        },
        right: {
          style: 'thin'
        }
      };
      //给所以单元格加上边框
      for (var i in dataInfo) {
        if (i == '!ref' || i == '!merges' || i == '!cols' || i == 'A1') {
    
        } else {
          dataInfo[i + ''].s = {
            border: borderAll,
            //居中属性
            alignment: {
              horizontal: "center",
              vertical: "center"
            },
          }
        }
      }
    
      //设置主标题样式
      dataInfo["A1"].s = {
        font: {
          name: '宋体',
          sz: 12,
          color: { rgb: "000000" },
          bold: true,
          italic: false,
          underline: false
        },
        alignment: {
          horizontal: "center",
          vertical: "center"
        },
        // fill: {
        //   fgColor: {rgb: "008000"},
        // },
      };
    
    
    
    
      var wbout = XLSX.write(wb, {
        bookType: bookType,
        bookSST: false,
        type: 'binary'
      });
      saveAs(new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
      }), `${filename}.${bookType}`);
    };
    

    使用

     // 拼接数据
        formatJson(filterVal, jsonData) {
          return jsonData.map((v) => filterVal.map((j) => v[j]))
        },
        handleDownloadExcel(item,ssssss) {
          console.log(item)
          console.log(ssssss)
          require.ensure([], () => {
            const { export_json_to_excel } = require('../excel/Export2Excel2') //注意这个Export2Excel路径
            const tHeader = [
              ['', '试航基准', '静水(当前拟合)', '静水(历史实际)', 'bf5(当前拟合)', 'bf5(历史实际)', '试航基准', '静水(当前拟合)', '静水(历史实际)', 'bf5(当前拟合)', 'bf5(历史实际)'], // 第二行数据
              [
                '',
                '满载',
                '',
                '',
                '',
                '',
                '空载',
                '',
                '',
                '',
                '',
              ],//第一行
              
            ]
            // 上面设置Excel的表格第一行的标题 格式为[[],[]]单行就输入[[]]
            const title = ['航速(kn)','油耗(t/day)', '', '', '', '', '', '', '', '', '', ] //标题 长度要标题长度一致
            const filterVal = [
              'speed',
              'scantlingBasic',
              'scantlingFitNows',
              'scantlingPractHiss',
              'scantlingBfxFitNows',
              'scantlingBfxPractHiss',
              'ballastBasic',
              'ballastFitNows',
              'ballastPractHiss',
              'ballastBfxFitNows',
              'ballastBfxPractHiss',
            ] // tableData里对象的属性key值 就是对应的属性名
            const list = ssssss //把要导出的数据tableData存到list
            const data = this.formatJson(filterVal, list)
            data.map((item) => {
              // console.log(item)
              item.map((i, index) => {
                if (!i) {
                  item[index] = ''
                }
              })
            })
            const merges = [['A1:A3'], ['B1:K1'], ['B2:F2'], ['G2:K2']] //合并单元格 格式[[],[]]
            export_json_to_excel({
              title: title,
              header: tHeader,
              data,
              merges,
              filename: item + '油耗分析',
              autoWidth: true,
              bookType: 'xlsx',
            })
          })
          // import('@/util/Export2Excel').then(excel=>{
          //   console.log(excel)
          // })
        },
    
    展开全文
  • java生成Excel

    2019-12-08 00:53:01
    java生成Excel 有时有这样的需求, 在项目启动时在某个文件夹下生成一个模板Excel文件, 以便我们在某个功能中下载它。 1.需要引入这两个依赖: <dependency> <groupId>cn.hutool</groupId> <...

    java生成Excel

    有时有这样的需求, 在项目启动时在某个文件夹下生成一个模板Excel文件, 以便我们在某个功能中下载它。
    1.需要引入这两个依赖:

    <dependency>
       <groupId>cn.hutool</groupId>
       <artifactId>hutool-all</artifactId>
       <version>4.0.5</version>
    </dependency>
    
    <dependency>
       <groupId>org.apache.poi</groupId>
       <artifactId>poi-ooxml</artifactId>
       <version>3.16</version>
    </dependency>
    

    2.创建excel文件中封装每行数据的实体类

    import lombok.Data;
    
    @Data
    public class ExcelTemplateVo {
        public String num;
        public String name;
        public String mobile;
    
        public ExcelTemplateVo(String num, String name, String mobile) {
            this.num = num;
            this.name = name;
            this.mobile = mobile;
        }
    }
    

    3.编写CommandLineRunner的实现类, 使得项目启动时, 执行我们实现的run方法, 生成excel表
    ps: 当然项目是在springboot或者springcloud下运行的, CommandLineRunner也是spring提供的, 纯servlet的项目应该已经很少见了吧

    import com.online.notary.common.logger.SysLogger;
    import com.online.notary.common.logger.SysLoggerFactory;
    import org.apache.poi.hssf.usermodel.*;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    @Component
    public class ExcelGenerator implements CommandLineRunner {
    
    
        /**
         * @return void
         * @Author 
         * @Description 项目启动时生成录单模板
         * @Param [strings]
         **/
        @Override
        public void run(String... strings) throws Exception {
            FileOutputStream outputStream = null;
            try {
                String fileName = "模板.xls";
                String filePath = "/online/templates/" + fileName;
                String path = "";
                File dir = new File(path + "/online/templates");
                if(!dir.exists()){
                	//这边注意是mkdirs方法,否则无法创建多级目录
                    boolean mkdir = dir.mkdirs();
                }
                File destFile = new File(path + filePath);
                if (!destFile.exists()) {
                    List<ExcelTemplateVo> voList = new ArrayList<ExcelTemplateVo>();
                    ExcelTemplateVo vo = new ExcelTemplateVo("1", "从长远", "156xxxxxxxx");
                    voList.add(vo);
                    ExcelTemplateVo vo1 = new ExcelTemplateVo("2", "从长远", "156xxxxxxxx");
                    voList.add(vo1);
                    String[] headerName = {"序号", "姓名", "手机"};
                    String[] headerKey = {"num", "name", "mobile"};
                    HSSFWorkbook wb = createExcel(headerName, headerKey, "模板", voList);
                    if (wb == null) {
                        return;
                    }
                    outputStream = new FileOutputStream(destFile);
                    wb.write(outputStream);
                    outputStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(outputStream != null){
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        private HSSFWorkbook createExcel(String[] headerName, String[] headerKey, String sheetName, List dataList) {
            try {
                if (headerKey.length <= 0) {
                    return null;
                }
                if (dataList.size() <= 0) {
                    return null;
                }
                HSSFWorkbook wb = new HSSFWorkbook();
                HSSFSheet sheet;
                if ((sheetName == null) || (sheetName.equals("")))
                    sheet = wb.createSheet("Sheet1");
                else {
                    sheet = wb.createSheet(sheetName);
                }
                HSSFRow row = sheet.createRow(0);
                HSSFCellStyle style = wb.createCellStyle();
                style.setAlignment((short) 2);
                HSSFCell cell = null;
                if (headerName.length > 0) {
                    for (int i = 0; i < headerName.length; i++) {
                        cell = row.createCell(i);
                        cell.setCellValue(headerName[i]);
                        cell.setCellStyle(style);
    
                    }
                }
                int n = 0;
                HSSFCellStyle contextstyle = wb.createCellStyle();
                contextstyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00_);(#,##0.00)"));
    
                HSSFCellStyle contextstyle1 = wb.createCellStyle();
                HSSFDataFormat format = wb.createDataFormat();
                contextstyle1.setDataFormat(format.getFormat("@"));
    
                HSSFCell cell0 = null;
                HSSFCell cell1 = null;
    
                for (Iterator localIterator = dataList.iterator(); localIterator.hasNext(); ) {
                    Object obj = localIterator.next();
                    Field[] fields = obj.getClass().getDeclaredFields();
                    row = sheet.createRow(n + 1);
                    for (int j = 0; j < headerKey.length; j++) {
                        if (headerName.length <= 0) {
                            cell0 = row.createCell(j);
                            cell0.setCellValue(headerKey[j]);
                            cell0.setCellStyle(style);
    
                        }
                        for (int i = 0; i < fields.length; i++) {
                            if (fields[i].getName().equals(headerKey[j])) {
                                fields[i].setAccessible(true);
                                if (fields[i].get(obj) == null) {
                                    row.createCell(j).setCellValue("");
                                    break;
                                }
                                if ((fields[i].get(obj) instanceof Number)) {
                                    cell1 = row.createCell(j);
                                    cell1.setCellType(0);
                                    cell1.setCellStyle(contextstyle);
                                    cell1.setCellValue(Double.parseDouble(fields[i].get(obj).toString()));
                                    break;
                                }
                                if ("".equals(fields[i].get(obj))) {
                                    cell1 = row.createCell(j);
                                    cell1.setCellStyle(contextstyle1);
                                    row.createCell(j).setCellValue("");
                                    cell1.setCellType(1);
                                    break;
                                }
                                row.createCell(j).setCellValue(fields[i].get(obj).toString());
                                break;
                            }
    
                        }
                    }
                    n++;
                }
                for (int i = 0; i < headerKey.length; i++) {
                    sheet.setColumnWidth(i, headerKey[i].getBytes().length * 2 * 256);
                }
                HSSFWorkbook localHSSFWorkbook1 = wb;
                return localHSSFWorkbook1;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
    }
    

    完事,

    展开全文
  • 如何批量重命名文件夹中的所有文件(excel结合DOS命令) 如何批量重命名文件夹中的所有文件(excel结合DOS命令) 1、在需要批量重命名的文件夹内,建立一个.bat文件(如图oldname.bat),内容编辑为 dir . /b> ...

    如何批量重命名文件夹中的所有文件(excel结合DOS命令)

    如何批量重命名文件夹中的所有文件(excel结合DOS命令)

    1、在需要批量重命名的文件夹内,建立一个.bat文件(如图oldname.bat),内容编辑为 dir . /b> list.txt。由此获得所有旧文件名。

    在这里插入图片描述
    在这里插入图片描述
    双击运行oldname.bat,生成list.txt,里面就是所有旧文件名。

    2、将需要变更的新文件名和旧文件名,建在一个excel文件的两列。dos命令中的重命名命令为:ren oldFilename newFilename,用excel命令中的concatenate命令,将新旧文件名连接起来。

    在这里插入图片描述

    3、将连接起来的新列名复制到一个txt文件,并保存为.bat文件并运行。注意应选择ANSI,不然会出现乱码。

    在这里插入图片描述

    展开全文
  • SpringBoot项目 1.导入 //表头下载 @GetMapping(path = "/excelExport/{id}") ... public void ExcelExport(@PathVariable("id") String id, HttpServletResponse response, HttpServletRequest req
  • 使用xlrd解析excel多级结构构建多叉树和结点结构由于要支持多级嵌套的表结构, 所以单纯的按照列的顺序来解析每行数据肯定达不到需求。所以约定Excel表头结构, 如果一个属性包含二级属性,则在该属性下新建一行表头...
  • 根据前台表样已定义好的高级表格,而当前表格的HeaderColumn部份为高级分组,即多层分组列,将我们前所见即所得,点击导出按钮后,直接根据数据的逻辑,自动生成了多层组表的表头部份数据样式。 文件夹中附有源代码...
  • 在许多企业办公系统中,经常会有用户要求,需要对数据进行统计并且可以直接下载Excel文件,这样子的话,既然客户提出了要求,我们就应该去满足吖,毕竟客户是上帝嘛,那么我们如何去实现呢?且看我为你一一道来。POI...
  • 最近碰到个需要下载zip压缩包... (5)代码中提供了2个压缩文件的方法,一个的输入参数为文件夹路径,一个为文件列表,可根据实际需求选择方法。 (4)可以选择是否保留原来的目录结构,如果不保留,所有文件跑压缩...
  • 目录一、导出excel到指定目录1、导出excel到指定目录示例截图2、导出excel到指定目录示例代码二、从指定目录下载excel文件1、从指定目录下载excel文件示例截图2、从指定目录下载excel文件示例代码 一、导出excel到...
  • 一、安装依赖 npm install -S file-saver ...在 /src 目录下新建 vendor文件夹,用于存放 Blob.js 和 Export2Excel.js 文件。 百度网盘下载地址 链接: https://pan.baidu.com/s/1efys5Awc5BxMdK71Jy1vKw 提取码: k...
  • 这里写自定义目录标题前端表格导出为excel方法合集前端接收后端blob文件流导出纯前端导出excel导出html中的表格元素通过blob.js和Export2Excel.js导出插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表...
  • Excel中如果能够将具有多级明细的数据进行分组显示,可以清晰地展示数据表格的整体结构,使整个文档具有一定层次感。根据需要设置显示或者隐藏分类数据下的详细信息,在便于数据查看、管理的同时也使文档更具美观...
  • WPS中如何自动生成文件目录

    千次阅读 2016-02-14 16:51:57
    这篇博文主要是讲解在WPS中如何自动生成文件的目录,这个功能还是比较常用的,介于本人之前因为这个问题和某某同学起过冲突,这里记录一下学习的过程。目录的生成这里以一个文章为例,使用的是最新版的WPS,文章内容...
  • Excel中如果能够将具有多级明细的数据进行分组显示,可以清晰地展示数据表格的整体结构,使整个文档具有一定层次感。根据需要设置显示或者隐藏分类数据下的详细信息,在便于数据查看、管理的同时也使文档更具美观...
  • Spark——Spark DataFrame导出为Excel文件

    千次阅读 2020-07-14 22:05:56
    <dependency>...spark-excel_2.11</artifactId> <version>0.12.5</version> </dependency> resultDF.select(sortedColumns.head, sortedColumns.tail: _*) .w
  • excel表格中的数字数据全都除以10000怎么做处理办法:【我的】,打开【资源管理器】击【菜单栏】中的【工具】菜单下的【文件夹选项】。在刚打开的【文件夹选项】中选择【文件类型】。在【已注册的文件类型】中找到...
  • Excel中如果能够将具有多级明细的数据进行分组显示,可以清晰地展示数据表格的整体结构,使整个文档具有一定层次感。根据需要设置显示或者隐藏分类数据下的详细信息,在便于数据查看、管理的同时也使文档更具美观...
  • //生成Excel HSSFWorkbook workbook = null; ExcelUtil excelUtil = new ExcelUtil(); List, Object>> mapList = this.getMapList(list); String saveBaseUrl = FileUtils.getProjectPath() + File.separator; ...
  • PPT和WORD的世界,充满着排版的美化操作,在Excel世界同样也需要对表格、图表的美化,此篇带你进入真正的制表专家行列,使用Excel催化剂的格式管理增强功能加上对美感的艺术造诣,对Excel表格进行排版美化将会变得...
  • 通过索引excel表将文件进行文件夹分类的脚本,此脚本由于将ip和id对应并生成对应id的文件夹将文件进行分类,也可以任意规定表格内容,通过vul_sc_ip.txt和xlsx文件进行索引. # ... VC/MFC 下 递归遍历目录下的所有子...
  • Java实现将文件或者文件夹压缩成zip

    千次阅读 2018-09-19 10:11:34
     这个工具类在web项目中的使用场景就是多文件下载,我就简单说个下载多个excel表格的案例吧。  代码中的步骤为:  (1)创建一个临时文件夹  (2)将要下载的文件生成至该临时文件夹内  (3)当...
  • 日常办公场合中,除了常规的Excel、Word、PPT等文档外,还有一个不可忽略的文件格式是pdf格式,而对于想从pdf文件中获取信息时,常规方法将变得非常痛苦和麻烦。此篇给大家送一pdf文件提取信息大集合,几乎可涵盖...
  • web导出excel文件的几种方法

    千次阅读 2010-08-10 14:49:00
    <br />  <br />服务器端生成就是:根据用户请求,获取相应的数据,使用 poi/jxl, jacob/jawin+excel,或是用数据拼html的table或是cvs纯文本的数据格式等。然后按.xls或是.cvs格式的文件的形式返回给用户...
  • 强大易用的Excel转Json工具

    万次阅读 2018-09-18 12:18:18
    好久没更新了,最近配置json文件的时候发现以前用的excel转json转换器不好用了,上网找了几个都不能满足需求,于是自己用python写了一个。工具不复杂,使用简单,但能满足几乎所有excel转json的要求了,包括多层嵌套...
  • spring boot 实现导出execl,指定路径

    千次阅读 2018-07-28 17:36:53
    1,简单的导出execl,网上有很多,大家自行搜索 2,先看导出的样子 3,controller ...import io.renren.common.excel.Execl; import io.renren.common.excel.ExportExcel; import io.renren.common...
  • 常见Excel技巧表

    万次阅读 2018-12-09 16:31:39
    EXCEL常见技巧锦集 一、基础操作部分: 001、Excel365基础工作界面介绍 002、光标跳转设置、常用的录入技巧 003、多个单元格内容复制到一个单元格中、CTRL+D填充、快速做序列号 004、实时预览、双击格式刷、...
  • Excel环境中,想得到规范性的数据录入,除非是自行对数据有很深的认识,知道哪些数据是脏乱数据,不轻易在Excel生成,有意识地去规避它,不然极大灵活性的Excel,在数据录入的操作上简单是一场数据灾难。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 540
精华内容 216
关键字:

多级文件夹生成excel表格