如何调试Office.js+;Excel 2016崩溃
(重写这篇文章的全文。请检查以前版本的编辑历史记录) 所需帮助:如何调试Office.js+;Excel 2016崩溃,excel,typescript,office-js,Excel,Typescript,Office Js,(重写这篇文章的全文。请检查以前版本的编辑历史记录) 所需帮助: 我的Office.js项目经常遇到Excel(桌面)崩溃 即使在VS中启用了所有异常断点,也会崩溃 似乎是随机崩溃的 在EventViewer中只有APPCRASH日志 代码在Excel Online中运行良好 需要关于Office.js开发更好的工作流(调试崩溃)的建议 我的环境: Typescript@2.3.2 核心-js@2.4.1(承诺polyfill) Visual Studio 2015(更新3) Excel 201
//TEST1
或//TEST2
),那么代码将一直运行到完成(在代码更改后必须完全重新启动Excel)//Office.js入口点
Office.initialize=异步函数(原因){
log(“Office.JS已初始化!”);
控制台日志(“测试启动”);
对于(var i=0;i{
//==设置============
常数工作表=等待设置(ctx);
//==运行============
//要删除的范围
常量范围=等待工作表.getRange(“B1:B2”);
ctx.trackedObjects.add(范围);
等待ctx.sync();
//从范围中获取整行
const entireRow=range.getEntireRow();
entireRow.load(“地址”);
等待ctx.sync();
ctx.trackedObjects.add(entireRow);
//删除整行
log(`Deleting:${entireRow.address}`);
entireRow.delete(Excel.DeleteShiftDirection.up);
等待ctx.sync();
//==清理============
等待拆卸(ctx,工作表);
});
}
//测试:给定一个范围,转换为表
异步函数ConvertToListObjectTest():Promise{
等待Excel.run(异步ctx=>{
//==设置============
常数工作表=等待设置(ctx);
//==运行============
//要转换的Ger范围
常量范围=工作表.getRange(“B3:E20”);
ctx.trackedObjects.add(范围);
//转换为表格
const table=工作表.tables.add(范围,true);
ctx.trackedObjects.add(表);
等待ctx.sync();
//检查表名
表1.荷载(“名称”);
等待ctx.sync();
console.log(“添加的表:+Table.name”);
//==清理============
等待拆卸(ctx,工作表);
});
}
因为没有崩溃信息,VisualStudio中也没有崩溃信息,所以我不知道何时/何地/是什么导致了崩溃
为了给出这个简单的示例,我不得不逐行注释代码,重新编译,重新运行,崩溃,重复
这是一个极其痛苦的隔离违规代码的过程
所以我的最后一个问题是:
开发office.js项目是否有更好的方法/工作流程?特别是在处理bug时,无论是我的代码、office.js还是Excel本身?让我四处问问,我们会给你回复的。@MichaelZlatkovsky Microsoft谢谢。如果有帮助的话,我最近用代码更新了我的问题。
// Office.js entry point
Office.initialize = async function (reason) {
console.log("Office.JS initialized!");
console.log("Test Start");
for(var i=0; i<100; i++) {
console.log(`Iteration ${i}`);
await ConvertToListObjectTest(); // TEST1
await DeleteEntireRowTest(); // TEST2
}
console.log("Test End");
}
// Setup: Generates and activates a random, test worksheet
async function Setup(ctx: Excel.RequestContext): Promise<Excel.Worksheet> {
// Create
const sheetName = `Sheet${+new Date}`;
const worksheet = ctx.workbook.worksheets.add(sheetName);
ctx.trackedObjects.add(worksheet);
// Activate
worksheet.activate();
await ctx.sync();
return worksheet;
}
// TearDown: Cleanup test worksheet
async function TearDown(ctx:Excel.RequestContext, worksheet: Excel.Worksheet): Promise<void> {
worksheet.delete();
await ctx.sync();
}
// Test deleting entire rows, given a range
async function DeleteEntireRowTest(): Promise<void> {
await Excel.run( async ctx=> {
// == SETUP ============
const worksheet = await Setup(ctx);
// == RUN ============
// Range to delete
const range = await worksheet.getRange("B1:B2");
ctx.trackedObjects.add(range);
await ctx.sync();
// Get entire rows from range
const entireRow = range.getEntireRow();
entireRow.load("address");
await ctx.sync();
ctx.trackedObjects.add(entireRow);
// Delete entire rows
console.log(`Deleting: ${entireRow.address}`);
entireRow.delete(Excel.DeleteShiftDirection.up);
await ctx.sync();
// == CLEAN UP ============
await TearDown(ctx, worksheet);
});
}
// Test: Given a range, convert to table
async function ConvertToListObjectTest(): Promise<void> {
await Excel.run( async ctx => {
// == SETUP ============
const worksheet = await Setup(ctx);
// == RUN ============
// Ger range to convert
const range = worksheet.getRange("B3:E20");
ctx.trackedObjects.add(range);
// Convert to table
const table = worksheet.tables.add(range, true);
ctx.trackedObjects.add(table);
await ctx.sync();
// Check table name
table.load("name");
await ctx.sync();
console.log("Table added: " + table.name);
// == CLEAN UP ============
await TearDown(ctx, worksheet);
});
}