<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10141&amp;type=atom" />
	<updated>2015-01-09T09:43:32Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10141</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=90232#p90232" />
			<content type="html"><![CDATA[<p><span style="color: Green">И здесь нарисовался <img src="//forum.script-coding.com/img/smilies/mad.png" width="15" height="15" />.</span></p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2015-01-09T09:43:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=90232#p90232</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88945#p88945" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>Не проще брать число и писать число?</p></blockquote></div><p>Попробовал -&nbsp; действительно проще ;-)<br />Здравствуйте все!<br />Прошу прощения за перерыв в сообщениях - сначала неделю готовился к отпуску, потом отпуск, потом неделю разгребал после отпуска накопившиеся дела. А тут подошло время отчёта за ноябрь - хочешь-не хочешь, а пришлось вернуться к теме ;-)<br />Нашёл, как решить проблему (пока &quot;пытался выделить из всего большого скрипта маленький кусочек&quot; ;-). <br />После того, как происходит заполнение листа книги числами, в скрипте ещё проходит замена шаблонных значений в строках на реальные значения (например, в шаблоне листа была строка &quot;Отчёт за %mmmm_gggg%&quot;, и надо было в этой строке заменить &quot;%mmmm_gggg%&quot; на &quot;ноябрь 2014&quot;).<br />Скрипт был написан в спешке и эта операция замены проделывалась над <strong>всеми</strong> ячейками листа:<br /></p><div class="codebox"><pre><code>
   strWhat = &quot;%&quot; + CStr(Sheet1.Cells(constNomerZagolovka, jz).Value) + &quot;%&quot;    &#039; строка, которую заменяем
   strReplacement = CStr(Sheet1.Cells(i, jz).Value)                &#039; строка, на которую заменяем
   For iSvoInf = 1 To Sheet1SvoInf.UsedRange.Rows.Count
      For jSvoInf = 1 To Sheet1SvoInf.UsedRange.Columns.Count
         Sheet1SvoInf.Cells(iSvoInf, jSvoInf).Value = Replace(Sheet1SvoInf.Cells(iSvoInf, jSvoInf).Value, strWhat, strReplacement)        &#039; меняем 
      Next
   Next
</code></pre></div><p>Если же ограничить замену текста только ячейками, в которых действительно есть строка strWhat - то проблема решена - числа остаются числами - и целые, и с копейками.<br />Но загадка всё-таки осталась нерешённой - почему после замены текста целые числа остаются числами, а числа с копейками становятся текстом?<br />Прилагаю результат модифицированного (добавлена замена текста на текст по всем ячейкам листа, и шаг значения не 0.01, а 0.1) скрипта коллеги <strong>Slav</strong>.<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
    strWhat = &quot;%mmmm_gggg%&quot;    &#039; строка, которую заменяем
    strReplacement = &quot;ноябрь 2014&quot;    &#039; строка, на которую заменяем
    For iSvoInf = 1 To myWB.Worksheets(1).UsedRange.Rows.Count
       For jSvoInf = 1 To myWB.Worksheets(1).UsedRange.Columns.Count
          myWB.Worksheets(1).Cells(iSvoInf, jSvoInf).Value = Replace(myWB.Worksheets(1).Cells(iSvoInf, jSvoInf).Value, strWhat, strReplacement)        &#039; меняем 
       Next
    Next
</code></pre></div></div></div>]]></content>
			<author>
				<name><![CDATA[nicksh]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30796</uri>
			</author>
			<updated>2014-12-08T08:52:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88945#p88945</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88306#p88306" />
			<content type="html"><![CDATA[<p><strong>nicksh</strong>, присоединяюсь к словам коллеги <strong>Slav</strong> и в свою очередь добавлю - Вы в курсе, что <span class="bbu">Excel содержит встроенные механизмы для подключения к БД и выгрузки результатов запроса на лист</span> ? При этом, если я не ошибаюсь, движок Excel-я автоматически определяет тип данных полей и соответственно форматирует тип ячеек.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-11-13T14:17:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88306#p88306</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88266#p88266" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>nicksh пишет:</cite><blockquote><p>...<br />Оба <strong>числа пишутся </strong>в ячейку <strong>как строки </strong>с точкой (&quot;2.70&quot; и &quot;2.00&quot;).</p></blockquote></div><p>nicksh,</p><p>ход Ваших мыслей для меня загадка.</p><p>Возвращаемся к исходной задаче - Вы переписываете из источника в приемник (&quot;из БД в Excel&quot;).<br />В источнике Ваша &quot;сумма с копейками&quot; в каком формате хранится?<br />В числовом (float, double, ...) или строковом (string, varchar, ...)?<br />Всякое бывает, но я предположу что в числовом.</p><p>В приемнике Вы также хотите увидеть числовой формат - если я правильно понял.</p><p>Внимание вопрос: а зачем выполняя элементарное переписывание из числа в число Вы затеваете какие-то манипуляции на тему &quot;как строки&quot;?<br />Вступая на этот тернистый путь Вы действительно должны строго контролировать региональные настройки - причем с двух сторон: на сервере БД (источник) и в локальном Excel (приемник).<br />Более того - перейдя на соседний компьютер (где элементарно другие региональные настройки) Вы обнаружите что скрипт опять перестал работать.</p><p>Не проще брать число и писать число?</p>]]></content>
			<author>
				<name><![CDATA[Slav]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=16491</uri>
			</author>
			<updated>2014-11-13T06:32:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88266#p88266</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88258#p88258" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>nicksh пишет:</cite><blockquote><p>Пытаюсь выделить из всего большого (одновременная обработка четырёх файлов Excel) скрипта маленький кусочек, иллюстрирующий ошибку - пока не получается.</p></blockquote></div><p>Ждём.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-11-12T23:52:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88258#p88258</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88238#p88238" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>nicksh пишет:</cite><blockquote><p>формирование ещё пары столбцов - когда значение в ячейку пишется как строка (с запятой) и строка (с точкой):</p></blockquote></div><p>Так вот, в этом скрипте всё сработало так, как надо: в 4 столбце число с запятой выровнено как текст и перед ним есть предупреждение (восклицательный знак), в 5 столбце число с точкой записалось в ячейку как число и перед ним нет предупреждения.</p><p>А вот в реальном файле получается не так: число с копейками выглядит как число (и выровнено вправо), но перед ним есть предупреждение, а целое число - без предупреждения.<br />Оба числа пишутся в ячейку как строки с точкой (&quot;2.70&quot; и &quot;2.00&quot;).</p>]]></content>
			<author>
				<name><![CDATA[nicksh]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30796</uri>
			</author>
			<updated>2014-11-12T16:38:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88238#p88238</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88237#p88237" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>3. C результатами - сюда.</p></blockquote></div><p>Но в скрипт я добавил формирование ещё пары столбцов - когда значение в ячейку пишется как строка (с запятой) и строка (с точкой):<br /></p><div class="codebox"><pre><code>
        myWB.Worksheets(1).Cells(iRow, 4).NumberFormat = &quot;#,##0.00&quot;
        myWB.Worksheets(1).Cells(iRow, 4).Value = CStr(testVal)

        myWB.Worksheets(1).Cells(iRow, 5).NumberFormat = &quot;#,##0.00&quot;
        myWB.Worksheets(1).Cells(iRow, 5).Value = replace(CStr(testVal), &quot;,&quot;, &quot;.&quot;)
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[nicksh]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30796</uri>
			</author>
			<updated>2014-11-12T16:26:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88237#p88237</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88236#p88236" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><p>3. C результатами - сюда.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[nicksh]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30796</uri>
			</author>
			<updated>2014-11-12T16:21:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88236#p88236</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88233#p88233" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>nicksh пишет:</cite><blockquote><p>Пытаюсь выделить из всего большого (одновременная обработка четырёх файлов Excel) скрипта <strong>маленький кусочек</strong>, иллюстрирующий ошибку - пока не получается.<br />Пока маленький скрипт работает правильно - то есть оба числа - и целое, и с копейками пишутся как числа.</p></blockquote></div><p>nicksh,</p><p>1. Скопируйте мой скрипт в vbs-файл.<br />2. Сделайте xls-шаблон Test01.xlsx в той же папке.<br />3. C результатами - сюда.</p><div class="codebox"><pre><code>&#039;
&#039; тестируем формат
&#039;

    rootDir = Left(WScript.ScriptFullName, instrrev(WScript.ScriptFullName,&quot;\&quot;))

    FileXLS = rootDir &amp; &quot;Test01.xlsx&quot;

&#039; открываем в EXCEL    
    Set objExcel = CreateObject(&quot;Excel.Application&quot;)
        objExcel.Visible = True
        objExcel.displayAlerts = False
    Set myWB  = objExcel.Workbooks.Open(FileXLS)
    
    iRow = 0
    Do While iRow &lt; 500  &#039;  максимум строк
        iRow = iRow + 1
        testVal = iRow/100.00
        
        myWB.Worksheets(1).Cells(iRow, 1).Select  &#039;  встаем в текущую строку
        
        &#039; десятичное число
        myWB.Worksheets(1).Cells(iRow, 1).NumberFormat = &quot;#,##0.00&quot;
        myWB.Worksheets(1).Cells(iRow, 1).Value = testVal
        
        &#039; целое
        myWB.Worksheets(1).Cells(iRow, 2).NumberFormat = &quot;0&quot;
        myWB.Worksheets(1).Cells(iRow, 2).Value = testVal
        
        &#039; текст
        myWB.Worksheets(1).Cells(iRow, 3).NumberFormat = &quot;@&quot;
        myWB.Worksheets(1).Cells(iRow, 3).Value = testVal
    Loop  &#039;  конец цикла по строкам

    myWB.save()
    objExcel.quit()

    Set objExcel = Nothing

WScript.Quit 0
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Slav]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=16491</uri>
			</author>
			<updated>2014-11-12T15:25:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88233#p88233</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88230#p88230" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><div class="codebox"><pre><code>myWB.Worksheets(1).Cells(i_row,i_col).NumberFormat = &quot;#,##0.00&quot;
myWB.Worksheets(1).Cells(i_row,i_col).Value = 2.7</code></pre></div><p>Гарантировано представит с 2-мя знаками после запятой, да еще и на разряды разделит.</p></blockquote></div><p>Пока не помогло.<br />Пытаюсь выделить из всего большого (одновременная обработка четырёх файлов Excel) скрипта <strong>маленький кусочек</strong>, иллюстрирующий ошибку - пока не получается.<br />Пока маленький скрипт работает правильно - то есть оба числа - и целое, и с копейками пишутся как числа.</p>]]></content>
			<author>
				<name><![CDATA[nicksh]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30796</uri>
			</author>
			<updated>2014-11-12T13:54:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88230#p88230</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88225#p88225" />
			<content type="html"><![CDATA[<p>В крайнем случае, можно наверное, выполнить такую функцию в <strong>VBA</strong> и получить текущий разделитель для <strong>Excel</strong>.<br /></p><div class="codebox"><pre><code>
Function GetDecimalSplitter()
    GetDecimalSplitter = Mid(1/2,2,1)
End Function
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-11-12T11:59:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88225#p88225</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88221#p88221" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>nicksh пишет:</cite><blockquote><p>...<br />хотя весь столбец отформатирован как числовой с двумя знаками после запятой<br />...<br />Как &quot;надёжно&quot; записать число в ячейку - чтобы число оставалось числом всегда, независимо от мнения Excel по этому поводу?</p></blockquote></div><p>nicksh,</p><p>1. Не надейтесь на предварительное форматирование xls-шаблона при заполнении из внешнего скрипта - при записи в каждую ячейку из своего скрипта сами гарантируйте тот формат, который хотите видеть.</p><p>2. <br /></p><div class="codebox"><pre><code>myWB.Worksheets(1).Cells(i_row,i_col).NumberFormat = &quot;#,##0.00&quot;
myWB.Worksheets(1).Cells(i_row,i_col).Value = 2.7</code></pre></div><p>Гарантировано представит с 2-мя знаками после запятой, да еще и на разряды разделит.</p><p>В эксельных форматах есть одна особенность, которая меня поначалу удивляла - они имеют фиксированные разделители, независимо от региональных настроек.</p>]]></content>
			<author>
				<name><![CDATA[Slav]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=16491</uri>
			</author>
			<updated>2014-11-12T11:17:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88221#p88221</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88217#p88217" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>В скрипте vbs пишу данные из БД в файл Excel.</p></blockquote></div><p>И где Ваш код? Где исходные данные, на которых можно его проверить?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-11-11T22:49:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88217#p88217</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88216#p88216" />
			<content type="html"><![CDATA[<p>По ходу дело в разделителе дробной и целой части. Региональные настройки влияют.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2014-11-11T20:25:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88216#p88216</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: не получается сумму с копейками записать в ячейку Excel как число]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88207#p88207" />
			<content type="html"><![CDATA[<p>Здравствуйте всем!<br />В скрипте vbs пишу данные из БД в файл Excel.<br />В одной строке пишу в ячейку сумму с копейками (2.70), в другой строке в том же столбце - сумму без копеек (2.00).<br />Потом открываю файл в Excelе, и вижу сумму без копеек как число (2,00), а сумму с копейками - как текст (2,7), хотя весь столбец отформатирован как числовой с двумя знаками после запятой.<br />При выделении ячейки с суммой с копейками слева появляется квадратик с восклицательным знаком и текстом &quot;Число в этой ячейке отформатировано как текст, или перед ним стоит апостроф&quot;.<br />Как &quot;надёжно&quot; записать число в ячейку - чтобы число оставалось числом всегда, независимо от мнения Excel по этому поводу?</p>]]></content>
			<author>
				<name><![CDATA[nicksh]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=30796</uri>
			</author>
			<updated>2014-11-11T15:08:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88207#p88207</id>
		</entry>
</feed>
