增加了更多内容来解决这个问题:VBA使用javascript控制HTML表格

背景:目前我们有一种情况,我们需要分别填写三种不同的基于networking的时间跟踪工具,这是相当令人烦恼的,并导致一些准确性问题。

我创build了一个简单的Excel应用程序来跟踪时间,每周我都会从这个应用程序提交报告。 两个平台都是简单的HTML表格,使用这些平台很容易。

第三个网页使用了相当多的JavaScript和那个我有问题。 我几乎没有使用JavaScript的经验,所以我有点迷失在哪里可以find解决scheme。

问题:我可以使用表innerHTML访问和插入值

但是,当我点击更新button或点击从表中,所有的值消失。 当我物理地点击表格中的一行时,它会突出显示它,所以我猜测这是一些JavaScript函数来logging更改,我是否在正确的轨道上呢?

不幸的是,该网站正在使用login凭据,因此无法共享。

我非常感谢能解决这个问题的任何帮助!

编辑:这是一段时间,因为我上次有机会与此合作。 目前的状态是,我仍然无法填充报告的方式,刷新页面后值会坚持。

经过一番检查,我发现当你从下拉菜单中select一些东西时,它会调用叫做UpdateTimesheet的XMLHttpRequest。

至less有一些进展,如果我手动input值,然后在VBA中运行下面的行,它将保存input。 只是不知道如何input值的表,以便它实际上坚持…

IE.Document.parentWindow.execScript "TimesheetPage.updateTimesheet()", "Ja vaScript" 

经过一些检查后,我发现网页正在使用MicrosoftAjax,另一件事是,当我点击表中的一个单元格激活:

尝试XML请求,但由于该网站使用公司凭据autologin,不能真正要求用户保存凭据..不知道是否有可能以某种方式打开资源pipe理器,因为它会自动login,并使用它来获取请求? 另一件事,我检查了IGAikidoCOmpined.js和它很长的行动,所以不想粘贴整个代码,因为它会太多。 不过我想这个部分可能很有趣,

 this._set_value($IG.GridActivationProps.ActiveGroupedRow, f); if (c) { this.__raiseClientEvent("ActiveCellChanged", $IG.ActiveCellChangedEventArgs, [this, this.get_activeCell(), true, (k ? k.get_row() : null)]) 

无法弄清楚如何使用这个脚本虽然..

这是网站的forms。

 <form name="aspnetForm" method="post" action="./TimesheetPage.aspx" id="aspnetForm"> <div> <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value=""> <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value=""> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" 

这里是我试图填写的表格:

 <div id="x:1502727720.3:mkr:container" style="overflow: hidden; height: 372px;" mkr="container"> <table cellspacing="0" cellpadding="0" border="0" style="table-layout: fixed; width: 861px; visibility: visible;" id="x:1502727720.4:mkr:dataTbl.hdn" mkr="dataTbl.hdn"> <tbody id="x:1502727720.5:mkr:rows:nw:1" class="ig_TimesheetItem igg_TimesheetItem" nw="1" mkr="rows"> <tr id="x:-33.10000:adr:0" adr="0" type="row" class=""> <td adr="0" idx="0" type="cell" wlkd="1" class="" title="" style="width: 275px; text-align: left;"></td> <td adr="1" idx="1" type="cell" wlkd="1" class="" style="width: 16px;"><input style="BORDER-RIGHT-WIDTH: 0px; WIDTH: 16px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; HEIGHT: 16px; VISIBILITY: hidden; BORDER-LEFT-WIDTH: 0px" id="Image" onclick="return false;" src="../images/arrow_right_myTE_disabled.png" alt="Replicate" type="image" name="Image"></td> <td adr="2" idx="2" type="cell" wlkd="1" class="" style="width: 40px;"></td> <td adr="3" idx="3" type="cell" wlkd="1" class="" style="width: 40px;"></td> 

一旦我通过点击该表格的任何单元格来激活一行,

 <tr id="x:-33.10000:adr:0" adr="0" type="row" class=""> <td adr="0" idx="0" type="cell" wlkd="1" class="" title="" style="width: 275px; text-align: left;"></td> <td adr="1" idx="1" type="cell" wlkd="1" class="" style="width: 16px;"><input style="BORDER-RIGHT-WIDTH: 0px; 

变成这样:

 <tr id="x:-33.10000:adr:0" adr="0" type="row" class="igg_TimesheetActiveRow"> <td adr="0" idx="0" type="cell" wlkd="1" class="igg_TimesheetActiveCell" title="" tabindex="0" style="width: 275px; text-align: left;"></td> 

我想应该有可能以某种方式发送课程激活某些行?

我发现这两个函数似乎与激活他们属于TimesheetPage.aspx的单元版本有关

 Sys.Application.add_init(function() { $create(Infragistics.Web.UI.WebDataGrid, { "clientbindingprops": [ ["CellEditing"], { "c": { "ecc": "igg_TimesheetEditCell" 'Assignment': [ [], { "c": { "ro": false, "ck": "Assignment", "eid": "wdgTimeEntry_Assignment" } } ] }], ["ExitedEditMode:TimesheetPage.timeEntryGridExitingEditMode", "EnteringEditMode:TimesheetPage.timeEntryGridEnteringEditMode"] ] ], , ["CellValueChanged:TimesheetPage.timeEntryGridCellValueChanged", "CellValueChanging:TimesheetPage.timeEntryGridCellValueChanging", "RowAdding::2", "RowsDeleting::2"] ], ["Activation", , ], { "c": { "arc": "igg_TimesheetActiveRow", "acc": "igg_TimesheetActiveCell", "arsc": "igg_TimesheetActiveRowSelector", "arsi": "igg_TimesheetActiveRowSelectorImage", "ahc": "igg_TimesheetActiveColumn" ["Selection", 1, , 2, , , , ], { "c": { "sh": "igg_TimesheetSelectedHeader", "ehs": false, "si": "igg_TimesheetSelectedRowSelectorImage", "sr": "igg_TimesheetSelectedRowSelector", "sc": "ig_TimesheetSelected igg_TimesheetSelectedCell" ], , , ["RowSelectionChanging:TimesheetPage.cancelSelectionIfNeeded"] ["DataBound:TimesheetPage.timeEntryGridDataBound", "KeyDown:isValidTime", "Initialize:TimesheetPage.timeEntryGridInitialize"], "id": "ctl00_ctl00_MainContentPlaceHolder_ContentPlaceHolder_TimeReport_wdgTimeEntry", "name": "wdgTimeEntry" }, null, null, $get("ctl00_ctl00_MainContentPlaceHolder_ContentPlaceHolder_TimeReport_wdgTimeEntry")); }); Sys.Application.add_init(function() { $create(Infragistics.Web.UI.WebDataGrid, { "clientbindingprops": [ [ [, 0, 0, 0], { "c": { "vscb": 1, "cbc": 0, "ecr": true, "uid": "ctl00$ctl00$MainContentPlaceHolder$ContentPlaceHolder_TimeReport$wdgTimeCategory", "ti": 0 ["EditingCore"] ["CellEditing"], { "c": { "ecc": "igg_TimesheetEditCell" ["ExitedEditMode:TimesheetPage.timeCategoryGridExitingEditMode", "EnteringEditMode:TimesheetPage.timeCategoryGridEnteringEditMode"] ] ], , ["CellValueChanged:TimesheetPage.timeEntryGridCellValueChanged", "CellValueChanging:TimesheetPage.timeCategoryGridCellValueChanging", "RowAdding::2", "RowsDeleting::2"] ["Activation", , ], { "c": { "arc": "igg_TimesheetActiveRow", "acc": "igg_TimesheetActiveCell", "arsc": "igg_TimesheetActiveRowSelector", "arsi": "igg_TimesheetActiveRowSelectorImage", "ahc": "igg_TimesheetActiveColumn" ["DataBound:TimesheetPage.timeCategoryGridDataBound"], [] ], "id": "ctl00_ctl00_MainContentPlaceHolder_ContentPlaceHolder_TimeReport_wdgTimeCategory", "name": "wdgTimeCategory" }, null, null, $get("ctl00_ctl00_MainContentPlaceHolder_ContentPlaceHolder_TimeReport_wdgTimeCategory")); });