<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Странное поведение при работе с Excel]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16280&amp;type=atom" />
	<updated>2021-04-22T09:48:22Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=16280</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Странное поведение при работе с Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=147466#p147466" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><div class="quotebox"><cite>KepocuH пишет:</cite><blockquote><p>col := A_Index - внезапно строка</p></blockquote></div><p>Это вы как определили?</p></blockquote></div><p>Достоверно не определил, просто по аналогии:<br /><em>col:=1</em> работает, <em>col:=&quot;1&quot;</em> выдает ошибку 0x800a03ec.</p><div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Также If var is [not] type.</p></blockquote></div><p>К сожалению, работает не совсем как надо. Не помогает отличить число от строки, состоящей из цифр.<br />Этот код выведет &quot;Число&quot;. Дважды.<br /></p><div class="codebox"><pre><code>var := &quot;1&quot;
if var is integer 
	MsgBox Число
MsgBox % var + 0 = &quot;&quot; ? &quot;Не число&quot; : &quot;Число&quot;
</code></pre></div><p><em>col := A_Index + 0</em><br />Вот этот способ приведения строки к числу, пожалуй, самый простой. Спасибо!<br />За топик на autohotkey.com тоже спасибо.</p>]]></content>
			<author>
				<name><![CDATA[KepocuH]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28557</uri>
			</author>
			<updated>2021-04-22T09:48:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=147466#p147466</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Странное поведение при работе с Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=147465#p147465" />
			<content type="html"><![CDATA[<p><a href="https://www.autohotkey.com/boards/viewtopic.php?f=76&amp;t=89692&amp;p=395392#p395392">Задал</a> вопрос, может, кто знает.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-04-22T09:15:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=147465#p147465</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Странное поведение при работе с Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=147464#p147464" />
			<content type="html"><![CDATA[<p>Удалось воспроизвести проблему, действительно, странное поведение.<br /></p><div class="codebox"><pre><code>if !Excel := Excel_Get()
   Return

XLSht := Excel.ActiveSheet

loop 2 {
   row := A_Index
   loop 2 {
      col := A_Index
      XLSht.Cells(row, col).Value := &quot;test&quot;
   }
}

Excel_Get(WinTitle := &quot;ahk_class XLMAIN&quot;)  {
   ControlGet, hwnd, hwnd,, Excel71, %WinTitle%
   if !hwnd
      return
   Window := AccObjectFromWindow(hwnd, -16)
   Loop  {
      try Application := Window.Application
      catch
         ControlSend, Excel71, {esc}, %WinTitle%
   } Until !!Application
   return Application
}

AccObjectFromWindow(hWnd, idObject = 0)
{
   static IID_IDispatch   := &quot;{00020400-0000-0000-C000-000000000046}&quot;
        , IID_IAccessible := &quot;{618736E0-3C3D-11CF-810C-00AA00389B71}&quot;
        , OBJID_NATIVEOM  := 0xFFFFFFF0, VT_DISPATCH := 9, F_OWNVALUE := 1
        , h := DllCall(&quot;LoadLibrary&quot;, Str, &quot;oleacc&quot;, Ptr)
        
   VarSetCapacity(IID, 16), idObject &amp;= 0xFFFFFFFF
   DllCall(&quot;ole32\CLSIDFromString&quot;, Str, idObject = OBJID_NATIVEOM ? IID_IDispatch : IID_IAccessible, Ptr, &amp;IID)
   if DllCall(&quot;oleacc\AccessibleObjectFromWindow&quot;, Ptr, hWnd, UInt, idObject, Ptr, &amp;IID, PtrP, pAcc) = 0
      Return ComObjEnwrap(VT_DISPATCH, pAcc, F_OWNVALUE)
}</code></pre></div><p>Работает, если заменить <em>col := A_Index</em> на <em>col := A_Index + 0</em>.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-04-22T09:00:42Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=147464#p147464</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Странное поведение при работе с Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=147463#p147463" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>KepocuH пишет:</cite><blockquote><p>col := A_Index - внезапно строка</p></blockquote></div><p>Это вы как определили?<br /></p><div class="quotebox"><cite>KepocuH пишет:</cite><blockquote><p>Есть ли в Autohotkey надежный способ узнать, какой тип данных в данный момент хранится в переменной?</p></blockquote></div><div class="codebox"><pre><code>var := 5
MsgBox % var + 0 = &quot;&quot; ? &quot;Не число&quot; : &quot;Число&quot;</code></pre></div><p>Также <a href="https://www.autohotkey.com/docs/commands/IfIs.htm">If var is [not] type</a>.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-04-22T08:10:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=147463#p147463</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Странное поведение при работе с Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=147462#p147462" />
			<content type="html"><![CDATA[<p>Я снова не понимаю, почему это произошло, но вот в таком виде заработало:<br /></p><div class="codebox"><pre><code>loop 5 {
	row := A_Index
	loop 3 {
		tmp := [A_Index]
		col := tmp[1]
		Xl.Cells(row, col).Value := &quot;R&quot; . row . &quot;C&quot; . col
	}
}
</code></pre></div><p>И вот так тоже работает: </p><div class="codebox"><pre><code>col := Floor(A_Index)</code></pre></div><p>Короче, происходит что-то непонятное с типами данных.<br />A_Index - число;<br />row := A_Index - тоже число;<br />col := A_Index - внезапно строка;<br />col := Floor(A_Index) - число.</p><p>Есть ли в Autohotkey надежный способ узнать, какой тип данных в данный момент хранится в переменной?</p>]]></content>
			<author>
				<name><![CDATA[KepocuH]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28557</uri>
			</author>
			<updated>2021-04-22T07:08:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=147462#p147462</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Странное поведение при работе с Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=147460#p147460" />
			<content type="html"><![CDATA[<p>Если судить по тому коду, что вы привели, содержание col и A_Index идентично, ничего другого сказать нельзя.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-04-21T17:45:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=147460#p147460</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Странное поведение при работе с Excel]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=147459#p147459" />
			<content type="html"><![CDATA[<p>Здравствуйте!<br />Есть код, который должен заполнять ячейки таблицы excel.<br /></p><div class="codebox"><pre><code>loop 5 {
	row := A_Index
	loop 3 {
		col := A_Index
		Xl.Cells(row, col).Value := &quot;R&quot; . row . &quot;C&quot; . col
	}
}
</code></pre></div><p>При запуске вылетает ошибка 0x800a03ec.</p><p>Так работает:</p><div class="codebox"><pre><code>Xl.Cells(row, 1).Value := &quot;R&quot; . row . &quot;C&quot; . col</code></pre></div><p>Так тоже работает:</p><div class="codebox"><pre><code>Xl.Cells(row, A_Index).Value := &quot;R&quot; . row . &quot;C&quot; . col</code></pre></div><p>Почему я не могу использовать переменную в качестве второго параметра? <br />И почему могу - в качестве первого? <br />И почему таки могу в качестве второго, если ее имя - A_Index?</p>]]></content>
			<author>
				<name><![CDATA[KepocuH]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28557</uri>
			</author>
			<updated>2021-04-21T16:21:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=147459#p147459</id>
		</entry>
</feed>
