空了再写个完整的demo吧

//报表控件 输入参数待定
function SpreadObj(response) { var spread = null; //数据列表
var dataArray = [
["位置", '至上期末位移值(mm)', '本期位移(mm)','至本期末位移(mm)', '最大位移量(mm)', '位移速率(mm/月)', '预警值(mm)', '控制值(mm)'],
]; //数据列表信息 端点坐标
var dataListInfo = {
x: 0,//顶点坐标(左上角) x
y: 4,//顶点坐标(左上角) y
rows: 5,//行数
cols: 7//列数
}; //基本信息
var baseInfo = {
reportName: '',
reportNum: '',
bridgeName: '',
monitorUnit: '',
monitorDate: ''
}; //加载控件
function loadSpread() {
InitBaseInfo(); spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), {
sheetCount: 1
});
initSpread(spread);//初始化
//bindEvent(spread);//加载按钮事件
switchRowColumn(spread);
}
loadSpread(); //
this.ExportExcel = function (fileName) {
var excelIo = new GC.Spread.Excel.IO();
excelIo.save(spread.toJSON(), function (blob) {
saveAs(blob, fileName + '.xlsx');
}, function (e) {
console.error(e);//err
}, {
//password: '123'//设置密码
});
}; //初始化基础数据
function InitBaseInfo() {
baseInfo.reportName = response.reportName;
baseInfo.reportNum = response.reportnumber;
baseInfo.bridgeName = response.bridgeName;
baseInfo.monitorUnit = response.monitorUnit;
baseInfo.monitorDate = response.monitorDate; for (var i = 0; i < response.ListData.length; i++) {
var item = response.ListData[i];
dataArray.push(item);
}
dataListInfo.cols = dataArray[0].length;
dataListInfo.rows = dataArray.length; console.log(dataListInfo);
} //跟按钮绑定事件
function bindEvent(spread) {
//切换行和列
document.getElementById("btn1").onclick = function () {
switchRowColumn(spread);
}; //打印
document.getElementById("btn2").onclick = function () {
spread.print();//参数为索引
//spread.print(sheetIndex?);
}; //导出
document.getElementById("btn3").onclick = function () {
var excelIo = new GC.Spread.Excel.IO();
//instance.save(json, successCallBack, errorCallBack, options);
console.log(JSON.stringify(spread.toJSON()));
excelIo.save(spread.toJSON(), function (blob) {
saveAs(blob, 'excel1.xlsx');
}, function (e) {
console.error(e);//err
}, {
//password: '123'//设置密码
});
};
} //初始化 工作簿
function initSpread(spread) { //设置工作表名称
var sheet1 = spread.sheets[0];
sheet1.name("Common Chart"); //定义图表类型
var chartType = [{
type: GC.Spread.Sheets.Charts.ChartType.line,
desc: "line",
}, {
type: GC.Spread.Sheets.Charts.ChartType.lineStacked,
desc: "lineStacked",
}, {
type: GC.Spread.Sheets.Charts.ChartType.lineStacked100,
desc: "lineStacked100",
}, {
type: GC.Spread.Sheets.Charts.ChartType.lineMarkers,
desc: "lineMarkers",
}, {
type: GC.Spread.Sheets.Charts.ChartType.lineMarkersStacked,
desc: "lineMarkersStacked",
}, {
type: GC.Spread.Sheets.Charts.ChartType.lineMarkersStacked100,
desc: "lineMarkersStacked100",
}]; spread.suspendPaint();
//初始化 工作表
initSheet(sheet1,chartType[3].desc); //添加图表
initChart(sheet1,chartType[3].type);
spread.options.tabStripRatio = 0.8;
spread.resumePaint(); } //初始化 工作表
function initSheet(sheet) {
sheet.suspendPaint();//挂起渲染
sheet.setArray(dataListInfo.y, dataListInfo.x, dataArray);//参数: y x data
sheet.resumePaint();//继续渲染 //var activeSheet = spread.getActiveSheet();//获取当前激活的工作表
var activeSheet = sheet; //value = instance.getCell(row, col, sheetArea);
//cell.hAlign(GC.Spread.Sheets.HorizontalAlign.center);
activeSheet.getCell(0, 0).value(baseInfo.reportName).font("25pt 宋体").hAlign(GC.Spread.Sheets.HorizontalAlign.center);
activeSheet.getCell(1, 0).value("报表编号(" + baseInfo.reportNum + ")").font("15pt 宋体").hAlign(GC.Spread.Sheets.HorizontalAlign.center);
activeSheet.getCell(2, 0).value("桥梁名称:" + baseInfo.bridgeName);
activeSheet.getCell(2, 4).value("监测单位:" + baseInfo.monitorUnit);
activeSheet.getCell(3, 0).value("监测时间:" + baseInfo.monitorDate); //行号自适应
activeSheet.getCell(dataListInfo.rows + 20, 0).value("说明").hAlign(GC.Spread.Sheets.HorizontalAlign.center);;
activeSheet.getCell(dataListInfo.rows + 21, 0).value("分析与建议").hAlign(GC.Spread.Sheets.HorizontalAlign.center);;
activeSheet.getCell(dataListInfo.rows + 22, 0).value("监控员: 分析员: 审核员:"); //单元格高宽自适应
//activeSheet.autoFitColumn(0);//列宽自适应 参数:columnIndex
activeSheet.autoFitRow(0);//行高自适应 参数:rowIndex
activeSheet.autoFitRow(1); //单元格居中
//value = instance.getRange(row, col, rowCount, colCount, sheetArea);
activeSheet.getRange(dataListInfo.y, dataListInfo.x, dataListInfo.rows, dataListInfo.cols, GC.Spread.Sheets.SheetArea.viewport).hAlign(GC.Spread.Sheets.HorizontalAlign.center); //列宽自适应
for (var i = dataListInfo.x + 1; i < dataListInfo.cols; i++) {
activeSheet.autoFitColumn(i);
} //单元格合并
//value = instance.addSpan(row, column, rowCount, colCount, sheetArea);
var baseColumns = 8;//合并列最大宽度
activeSheet.addSpan(0, 0, 1, baseColumns, GC.Spread.Sheets.SheetArea.viewport);
activeSheet.addSpan(1, 0, 1, baseColumns, GC.Spread.Sheets.SheetArea.viewport);
activeSheet.addSpan(2, 0, 1, baseColumns / 2, GC.Spread.Sheets.SheetArea.viewport);
activeSheet.addSpan(2, baseColumns / 2, 1, baseColumns / 2, GC.Spread.Sheets.SheetArea.viewport);
activeSheet.addSpan(3, 0, 1, baseColumns, GC.Spread.Sheets.SheetArea.viewport);
//行号自适应
activeSheet.addSpan(dataListInfo.rows + 20, 0, 1, 2, GC.Spread.Sheets.SheetArea.viewport);
activeSheet.addSpan(dataListInfo.rows + 20, 2, 1, baseColumns - 2, GC.Spread.Sheets.SheetArea.viewport);
activeSheet.addSpan(dataListInfo.rows + 21, 0, 1, 2, GC.Spread.Sheets.SheetArea.viewport);
activeSheet.addSpan(dataListInfo.rows + 21, 2, 1, baseColumns - 2, GC.Spread.Sheets.SheetArea.viewport);
activeSheet.addSpan(dataListInfo.rows + 22, 0, 1, baseColumns, GC.Spread.Sheets.SheetArea.viewport); //activeSheet.getCell(0, 0).borderBottom(new GC.Spread.Sheets.LineBorder("", GC.Spread.Sheets.LineStyle.medium));
//activeSheet.getRange(-1, 3, -1, 1, GC.Spread.Sheets.SheetArea.viewport).borderBottom(new GC.Spread.Sheets.LineBorder("blue", GC.Spread.Sheets.LineStyle.mediumDashed)); //隐藏网格线
//activeSheet.options.gridline = {
// showVerticalGridline: false,
// showHorizontalGridline: false
//}; ////数据列表不跟着列标题走,解决:写入空单元格写入空数据,就不会有那样的问题
//for (var i = 0; i < 4; i++) {
// //行
// activeSheet.getCell(i, 0).value("");
//}
//for (var i = 0; i < dataArray.length; i++) {
// //行
// for (var j = 0; j < dataArray[0].length; j++) {
// //列
// activeSheet.getCell(i + 4, j).value(dataArray[i][j]);
// }
//}
} //初始化 图表
function initChart(sheet) {
//add common chart
//GC.Spread.Sheets.Charts.Chart(sheet, name, chartType, x, y, width, height, dataRange, dataOrientation);
//chartType:图表类型
// 位置:GC.Spread.Sheets.Charts Namespace : ChartType Enumeration:
// 类型:line,lineMarkers,columnClustered,pie
//dataOrientation:数据区域
//sheet.charts.add('Chart1', GC.Spread.Sheets.Charts.ChartType.lineMarkers, 0, 100, 800, 300, "A11:H14"); //根据列表自动调整图表的位置
//一个单元格默认为20的高度
var y = dataListInfo.rows * 20 + 6 * 20;
var width = dataListInfo.cols * 110; var chart = sheet.charts.add('chart1', GC.Spread.Sheets.Charts.ChartType.lineMarkers, 0, y, width, 300, getArea()); var title = chart.title();
title.text = "";//图表的名称,缺省时不显示
title.fontSize = 18;
chart.title(title);
} //根据 数据列表 得到 统计图表 的数据区域(dataOrientation)
function getArea() {
//例子
//A1:H4
//10, 0
//A11:H14 var x = dataListInfo.x;
var y = dataListInfo.y;
var character = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "X", "Y", "Z"]; //得到数据列表区域的 两个对角点的坐标
//左上角
var topPos = {
x: 1 + x,
y: 1 + y
};
//右下角
var endPos = {
x: 3 + x,
y: y + dataListInfo.rows
}; var startChar = character[x];//开始字母
var endChar = character[endPos.x - 1];//结束字母 return startChar + topPos.y + ':' + endChar + endPos.y;
} //切换行和列
function switchRowColumn(spread) {
var activeChart = spread.getActiveSheet().charts.all()[0];
if (activeChart) {
var isSwitched = activeChart.switchDataOrientation();
if (!isSwitched) {
alert("'Can't switch row/column");
}
}
} }

SpreadJS 生成报表的更多相关文章

  1. 使用C#通过调用minitab的COM库自动化生成报表

    本文介绍通过C#调用minitab com组建自动化生成报表的方法. 首先需要在minitab中通过手动配置的方式生成报表来得到该报表的命令行,过程如下 选择菜单“编辑器”->“启用命令”启用命 ...

  2. 使用google chart api生成报表图片

    使用google chart api生成报表图片 截图 折线图 饼图 柱状图   实现方法 原理是调用google的报表服务,动态拼接url字符串,得到一张图片,数据和说明文字都是从url中传进去的. ...

  3. 告别.NET生成报表统计图的烦恼

    告别.NET生成报表统计图的烦恼 标签: 报表.netstatistics图形数据库文档 2009-10-09 12:00 635人阅读 评论(0) 收藏 举报  分类: .net程序设计(C#)(2 ...

  4. 使用Python定时执行一任务,自动登录某web系统,生成报表,然后发送邮件给指定人员

    一.项目需求 每周从A系统生成一张Excel报表,发送此报表给指定人员,相关人员依据此报表去完成后续的工作. 项目限制: 1.无法通过EDI系统交互的方式从后台读取数据 2.由于公司网络环境限制,不能 ...

  5. 使用python获取整月每一天的系统监控数据生成报表

    1.安装阿里开源监控工具tsar tsar官方网站 wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip --no-c ...

  6. 使用FastReport报表工具生成报表PDF文档

    在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...

  7. C# WinfForm 控件之dev报表 XtraReport (八)动态生成报表

    功能说明:生成一个报表文件DV1,保存到本地AA.rep,再重新加载这个文件到DV2 1.布局如下图: panel1 上有三个button panel2上有个documentView dv1 pane ...

  8. jenkins持续集成Allure生成报表+邮件推送

    本次基于<jenkins 生成HTML报表,邮件推送>的基础上将生成HTML报表修改为Allure生成报表,可以参考官方文档:https://docs.qameta.io/allure/# ...

  9. ASP.NET MVC4 + Highcharts生成报表

    //后端 public ActionResult TighteningReport(BReportTighteningReportModel model, string rate, string we ...

随机推荐

  1. flutter RN taro选型思考

    当前RN已经成熟,但是依赖于大平台(JD.携程),小公司想开箱即用还是有困难的 纯Flutter还远未成熟,更多的是和原生进行混合 但是作为个体又想要在某一个点切入市场,就是需要作选择,基于当下及未来 ...

  2. Java并发之原子操作类汇总

    当程序更新一个变量时,如果是多线程同时更新这个变量,可能得到的结果与期望值不同.比如:有一个变量i,A线程执行i+1,B线程也执行i+1,经过两个线程的操作后,变量i的值可能不是期望的3,而是2.这是 ...

  3. java登录点击验证码图片切换验证码无效

    1.问题:我在写一个登录时需要添加一个验证码的功能,但是第一次可以生成验证码,但是点击的时候无法发起请求. 2.解决方案:在请求地址后面加一个时间戳,保证每次请求都不一样就可以了! window.on ...

  4. [转帖]tcpdump详细教程

    tcpdump详细教程 https://www.jianshu.com/p/d9162722f189 tcpdump tcpdump - dump traffic on a network tcpdu ...

  5. Jmeter参数化之数据库读取数据

    以读取mysql数据库为例 1.下载一个mysql驱动包,最好去mysql官网下载 下载网址:https://dev.mysql.com/downloads/connector/j/ Select O ...

  6. 使用linq对ado.net查询出来dataset集合转换成对象(查询出来的数据结构为一对多)

    public async Task<IEnumerable<QuestionAllInfo>> GetAllQuestionByTypeIdAsync(int id) { st ...

  7. [转]全面认识golang string

    作者:@apocelipes本文为作者原创,转载请注明出处:https://www.cnblogs.com/apocelipes/p/9798413.html string我们每天都在使用,可是对于s ...

  8. iOS11里判断Safari浏览器是无痕模式还是正常模式?

    var isPrivate = false; try { window.openDatabase(null, null, null, null); } catch (_) { isPrivate = ...

  9. 解决 Electron 5.0 版本出现 require is not defined 的问题

    Electron已经发布了5.0正式版,升级后发现原来能运行的代码报错提示require is not defined 经查相关资料,原来官方在5.0版本修改了nodeIntegration的默认值, ...

  10. 使用<label>标签修改input[type="checkbox"]的样式

    因为<label>的特性有两点 : ①不呈现任何效果, ②用户点击该标签, 浏览器能自动将焦点转移到相关的表单控件上. <form> <input type=" ...