通过网页将数据导出到Excel是常见需求,使用服务器端导出,开发周期长,部署麻烦。这里推荐一种客户端导出方法。
客户端导出与Sharepoint无关。这里附带使用场景基于SP,因为SP自带的导出功能比较弱,只能将List中全部数据导出的Excel中,如果要定制列和行很麻烦。使用客户端导出更简洁。
客户端导出特点:
- 灵活部署,无需重启服务器
- 配合sharepoint可以使用webservice获取全部数据
- 运行压力在客户端,服务器资源使用极少
使用方法:
- 需要客户端安装excel。
- 使用js开发
- 默认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