通过javascript获取sharepoint数据,使用JS导出Excel

5 篇文章 0 订阅
3 篇文章 0 订阅

通过网页将数据导出到Excel是常见需求,使用服务器端导出,开发周期长,部署麻烦。这里推荐一种客户端导出方法。

客户端导出与Sharepoint无关。这里附带使用场景基于SP,因为SP自带的导出功能比较弱,只能将List中全部数据导出的Excel中,如果要定制列和行很麻烦。使用客户端导出更简洁。

客户端导出特点:

  1. 灵活部署,无需重启服务器
  2. 配合sharepoint可以使用webservice获取全部数据
  3. 运行压力在客户端,服务器资源使用极少

使用方法:

  1. 需要客户端安装excel。
  2. 使用js开发
  3. 默认IE浏览器,或各种国产浏览器,谷歌从来都不兼容微软产品
//通过webservice获取List数据的JS。使用ActiveXObject("Microsoft.XMLDOM")解析xmlhttp.responseText中的xml即可获取全部list数据。获取数据预先写入一个Json后续使用更方便。
function GetListItems() {
    var soapMessage = GetSoapMessageLists("Listname");
    var Url = UrlFormat("http://localhost/sitename");
    xmlhttp = createXMLHttpRequest();
    xmlhttp.onreadystatechange =  function(){GetListItems_Complete();};
    xmlhttp.open("POST", Url, false);
    xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetListItems");
    xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlhttp.send(soapMessage);
}
function GetListItems_Complete() {
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
			alert(xmlhttp.responseText);
        }
    }
}

//把Webservice中获取的数据写入一个HTML Table或者Json中。这里因为需要页面展示,正好放到一个HTML table中table对象名是objTable
function ExportToExcel(objTable) 
{ 
	var oXL = null;
	try{  
	    oXL = new ActiveXObject("Excel.Application");  
	}catch(e){  
	    alert("无法启动Excel!\n\n如您在使用IE浏览器,并确信您的电脑中已经安装了Excel,那么调整IE的安全级别。\n\n具体操作:\n\n工具 → Internet选项 → 安全 → 自定义级别 → 对没有标记为安全的ActiveX进行初始化和脚本运行 → 启用");      
	    return false;  
	}
	// Get a new workbook. 
	var oWB = oXL.Workbooks.Add(); 
	var oSheet = oWB.ActiveSheet; 
	var hang = objTable.rows.length; 
	
	var lie = objTable.rows(0).cells.length; 
	
	// Add table headers going cell by cell. 
	for (var i=0;i<hang;i++) 
	{ 
	    for (var j=0;j<lie;j++) 
	    { 
	        oSheet.Cells(i+1,j+1).value = objTable.rows(i).cells(j).innerText; 
	    } 
	
	} 
	oXL.Visible = true; 
	oXL.UserControl = true; 
}

导出的Excel一般都是需要调整样式,字体,字号等满足客户需求,附注一下各个常用属性。 和常用色卡。

//设置Excel中ActiveWindow的属性:
ExcelSheet.ActiveWindow.freezePanes=true; //冻结行列
ExcelSheet.ActiveWindow.DisplayGridlines=false;//不显示网格
ExcelSheet.ActiveWindow.SplitRow = 2; //分割前两行
ExcelSheet.ActiveWindow.SplitColumn = 3; //分割前三列
//附带设置Excel中ActiveSheet的全部属性:
ExcelSheet.ActiveSheet.PageSetup.LeftMargin= 2/0.035; //页边距 左2厘米
ExcelSheet.ActiveSheet.PageSetup.RightMargin = 3/0.035; //页边距 右3厘米,
ExcelSheet.ActiveSheet.PageSetup.TopMargin = 4/0.035; //页边距 上4厘米,
ExcelSheet.ActiveSheet.PageSetup.BottomMargin = 5/0.035; //页边距 下5厘米
ExcelSheet.ActiveSheet.PageSetup.HeaderMargin = 1/0.035; //页边距 页眉1厘米
ExcelSheet.ActiveSheet.PageSetup.FooterMargin = 2/0.035; //页边距 页脚2厘米
ExcelSheet.ActiveSheet.PageSetup.CenterHeader = "页眉中部内容";
ExcelSheet.ActiveSheet.PageSetup.LeftHeader = "页眉左部内容";
ExcelSheet.ActiveSheet.PageSetup.RightHeader = "页眉右部内容";
ExcelSheet.ActiveSheet.PageSetup.CenterFooter = "页脚中部内容";
ExcelSheet.ActiveSheet.PageSetup.LeftFooter = "页脚左部内容";
ExcelSheet.ActiveSheet.PageSetup.RightFooter = "页脚右部内容";

8.对单元格操作,带*部分对于行,列,区域都有相应属性
ExcelSheet.ActiveSheet.Cells(row,col).Value = "内容"; //设置单元格内容
ExcelSheet.ActiveSheet.Cells(row,col).Borders.Weight = 1; //设置单元格边框*()
ExcelSheet.ActiveSheet.Cells(row,col).Interior.ColorIndex = 1; //设置单元格底色*(1-黑色,
2-白色,3-红色,4-绿色,5-蓝色,6-黄色,7-粉红色,8-天蓝色,9-酱土色..可以多做尝试)
ExcelSheet.ActiveSheet.Cells(row,col).Interior.Pattern = 1; //设置单元格背景样式*(1-无,
2-细网格,3-粗网格,4-斑点,5-横线,6-竖线..可以多做尝试)
ExcelSheet.ActiveSheet.Cells(row,col).Font.ColorIndex = 1; //设置字体颜色*(与上相同)
ExcelSheet.ActiveSheet.Cells(row,col).Font.Size = 10; //设置为10号字*
ExcelSheet.ActiveSheet.Cells(row,col).Font.Name = "黑体"; //设置为黑体*
ExcelSheet.ActiveSheet.Cells(row,col).Font.Italic = true; //设置为斜体*
ExcelSheet.ActiveSheet.Cells(row,col).Font.Bold = true; //设置为粗体*
ExcelSheet.ActiveSheet.Cells(row,col).ClearContents; //清除内容*
ExcelSheet.ActiveSheet.Cells(row,col).WrapText=true; //设置为自动换行*
ExcelSheet.ActiveSheet.Cells(row,col).HorizontalAlignment = 3; //水平对齐方式枚举* (1-常规,
2-靠左,3-居中,4-靠右,5-填充 6-两端对齐,7-跨列居中,8-分散对齐)
ExcelSheet.ActiveSheet.Cells(row,col).VerticalAlignment = 2; //垂直对齐方式枚举*(1-靠上,
2-居中,3-靠下,4-两端对齐,5-分散对齐)
//行,列有相应操作:
ExcelSheet.ActiveSheet.Rows(row).
ExcelSheet.ActiveSheet.Columns(col).
ExcelSheet.ActiveSheet.Rows(startrow+":"+endrow). //如Rows("1:5")即1到5行
ExcelSheet.ActiveSheet.Columns(startcol+":"+endcol). //如Columns("A:B")即1到2列
//区域有相应操作:
XLObj.Range(startcell+":"+endcell).Select;
//如Range("A2:H8")即A列第2格至H列第8格的整个区域
XLObj.Selection.
//合并单元格
XLObj.Range(startcell+":"+endcell).MergeCells = true;
//如Range("A2:H8")即将A列第2格至H列第8格的整个区域合并为一个单元格
或者:
XLObj.Range("A2",XLObj.Cells(8, 8)).MergeCells = true;

9.设置行高与列宽
ExcelSheet.ActiveSheet.Columns("A:Z").ColumnWidth = 20;//设置Column的宽度为20
ExcelSheet.ActiveSheet.Rows("1:10").RowHeight = 50;//设置row行的宽度为50

ColorIndex对应的色值

如需要使用RGB颜色,要将RGB转换为十进制,通过如下属性赋值

ExcelSheet.ActiveSheet.Cells(row,col).Interior.Color = 1652735;//大红

使用两层的For循环对单元格调整颜色或字体效率很低,可以考虑是用excel 的range批量操作。参考我下一篇:通过JS导出Excel。将JS数组转换为VB数组_佛曰我不想说话的博客-CSDN博客在JS中可以使用excel对象range赋值,但不能直接使用js的array,需要预先将js的数组转换成二进制的dictionary才可以。通过如下函数可以转换将JS的数组转换成VB数组:function toVBArray1(jarray) { var dict1 = new ActiveXObject('Scripting.Dictionary'); for (var...https://blog.csdn.net/GetDC/article/details/99425352

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值