2015-09-25 60 views
2

我必須缺少的東西:外接程序Office365:把數據插入到由任務窗格excel工作表附加

[問題]:

我有數據的2維數組的,我想從單元格A1開始插入到當前表單中。我也必須格式化這些數據。 當前文檔可能是空的或不是。我無法控制這一點。

稍後,我需要從文檔中刪除數據並插入新數據。這組新數據可能有不同的尺寸。

這似乎不可能使用Office JavaScript Api。

我嘗試使用TableBindings等的所有事情都失敗了。在很多情況下,根據MSDN工作的功能失敗,給我提供了諸如「內部錯誤」(代碼5001)或不受支持的綁定操作(3010)等神祕錯誤消息。我必須使用tablebindings,因爲根據MSDN文檔,我無法將格式應用於其他任何內容。

下面的解決方案是不可接受的:

  • 強制用戶使用特定的文檔模板與已有的命名錶
  • 迫使用戶我的外接開始工作之前,選擇單元格「A1」。
  • 強制用戶在插入數據之前選擇一個範圍。

從可用性的角度來看,所有這些都是可怕的解決方案。

可以創建一個名爲項結合,並通過數列和行,建設這樣一個字符串構建範圍「A1:C232」,但這隻能使用一次,因爲:

  • 我可以'刪除數據(是的,調用「deleteAllDataValuesAsync」的綁定創建一個這樣的命名範圍拋出錯誤3010(即使綁定說的是它是一個「表」綁定..笏?)。
  • 我不能覆蓋它與不同大小的數據(覆蓋錯誤)
  • 我無法對其設置格式(是的,它「SA綁定創建爲tablebinding,是的,我可以調用setFormatAsync功能,它拋出一個‘內部錯誤,5001’ - > #headdesk

我希望從微軟有人讀這一點,並能指出我在正確的方向。我真的希望!因爲我開始擔心這實際上是通過設計。 (在過去幾周的鬥爭中,我非常沮喪,因爲office.js很難喧譁,所以我會在這裏停止..不要讓我開始使用ui結構)

回答

5

隨着Office 2016中引入新的Excel Javascript API(即將在Office Online中提供),使用新的Range對象處理工作表數據很容易。下面的代碼片段不需要用戶範圍選擇或任何其他操作。

var data = [ 
    [1,2,3], 
    [2,6,7] 
] 

Excel.run(function (ctx) { 
    // make space for the data to be inserted 
    var sheet1 = ctx.workbook.worksheets.getItem("Sheet1"); 
    var firstCell = sheet1.getCell(0,0); 
    var lastCell = sheet1.getCell(data.length - 1, data[0].length - 1); 
    var range = firstCell.getBoundingRect(lastCell).insert('down'); 

    range.values = data; // insert data 
    range.format.font.bold = true; 

    range.delete('up'); // erase data, shift up 
    return ctx.sync(); 
}).catch(function(error) { 
    console.log(error); 
}) 

在Office JS Snippet資源管理器中試一下,看到下面鏈接的博客帖子以獲取更多信息!

https://github.com/OfficeDev/office-js-snippet-explorer

https://dev.office.com/blogs/Office-js-Public-Preview

+2

哇!這是**完全**我如何期望Api工作和外觀。比我們現在擁有的方式更清潔。這將不會移植到Office 2013,是嗎? (我想這將需要更新辦公室本身的形式,更新/服務包,對吧?) – aremes

+1

不幸的是,我不知道有任何計劃將新API移植到Office '13和更早版本。但是,如果您訂購了O365,則可以免費升級到Office 16。此外,新API將很快移植到Office Online和Mac/iOS。 [鏈接](http://dev.office.com/blogs/Office-js-Public-Preview) –

相關問題