我有一些相当古老的技术,Office Web Components(OWC)。
这意味着在我的网页上我将Excel嵌入为OLE对象
<object classid="clsid:0002E551-0000-0000-C000-000000000046" id="Spreadsheet1" width="1100" height="750">
<param name="DataType" value="XMLDATA" />
<param name="AllowPropertyToolbox" value="-1" />
<param name="AutoFit" value="1" />
<param name="Calculation" value="-4105" />
<param name="Caption" value="Microsoft Office-regneark" />
<param name="DisplayColumnHeadings" value="-1" />
<param name="DisplayGridlines" value="-1" />
<param name="DisplayHorizontalScrollBar" value="-1" />
<param name="DisplayOfficeLogo" value="-1" />
<param name="DisplayPropertyToolbox" value="0" />
<param name="DisplayRowHeadings" value="-1" />
<param name="DisplayTitleBar" value="0" />
<param name="DisplayToolbar" value="-1" />
<param name="DisplayVerticalScrollBar" value="-1" />
<param name="DisplayWorkbookTabs" value="1" />
<param name="EnableEvents" value="-1" />
<param name="MaxHeight" value="80%" />
<param name="MaxWidth" value="80%" />
<param name="MoveAfterReturn" value="-1" />
<param name="MoveAfterReturnDirection" value="-4121" />
<param name="RightToLeft" value="0" />
<param name="ScreenUpdating" value="-1" />
<param name="EnableUndo" value="-1" />
<!--param name="XMLURL" value="rangeirange.xml"-->
</object>
我想这不是太重要,但后来我想冻结一些列,通常我可以在JavaScript中使用所有VBA,但这段代码失败了:
exlObj = document.all.Spreadsheet1;
exlObj.ActiveWindow.SplitColumn = 3;
exlObj确实具有ActiveWindow属性,但它没有SplitColumn属性。
现在我已经调查了,这是代码问题。请注意,这是JavaScript,但它模仿VBA,因为这就是COM的工作原理。
exlObj.Sheets(1).Activate();
exlObj.ActiveWindow.FreezePanes = false;
exlObj.Sheets(1).Range('B2').Activate();
exlObj.ActiveCell.Value = 'Foo';
//exlObj.ActiveWindow.SplitRow = 10;
exlObj.ActiveWindow.FreezePanes = true; // <- this is the line
我的问题是,即使在最后一行之后,FreezePanes属性也始终为false。
这样的财产可能会出现什么问题?我有一些旧的代码,它们的功能相同,并且有效。
答案 0 :(得分:1)
事实证明我只需要使用Select而不是Activate
exlObj.Sheets(1).Activate();
exlObj.ActiveWindow.FreezePanes = false;
exlObj.Sheets(1).Range('B2').Select(); <-- changed Activate() to Select()
exlObj.ActiveCell.Value = 'Foo';
//exlObj.ActiveWindow.SplitRow = 10;
exlObj.ActiveWindow.FreezePanes = true; // <- this is the line