通過javascript獲取sharepoint數據,使用JS導出Excel

通過網頁將數據導出到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;//大紅

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章