<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6741</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6741&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Экспорт данных из книги Excel в таблицу б/д Access».]]></description>
		<lastBuildDate>Sun, 19 Feb 2012 18:32:50 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57087#p57087</link>
			<description><![CDATA[<div class="codebox"><pre><code>&#039; VB Script Document
option explicit
&#039; константы для работы с ADO
Const adDouble = 5, adDate = 7, adCurrency = 6, adBoolean = 11, adVarWChar = 202, adLongVarWChar = 203
Const adUseClient = 3, adOpenStatic = 3, adLockOptimistic = 3, adCmdText = &amp;H1
Const adSchemaTables = 20, adSchemaColumns = 4
 
&#039;1. получаем ID заказа:
Dim oArgs &#039;объекта для чтения параметров строки запуска файла
Set oArgs = WScript.Arguments &#039;получение объекта для чтения параметров строки запуска файла

Dim OrderID
OrderID = Trim(Replace(oArgs(0),&quot;/&quot;,&quot;&quot;)) &#039;trim на всякий пожарный

&#039;2. получаем путь к файлу
Dim oConMDB
Set oConMDB = CreateObject(&quot;ADODB.Connection&quot;)
&#039;http://www.connectionstrings.com/access
With oConMDB
  .Provider = &quot;Microsoft.Jet.OLEDB.4.0&quot;
  .Open &quot;D:\Documents\Склад и торговля\Backups\2012-01-13.mdb&quot;
End With
 
Dim oRs, File
Set oRs = oConMDB.Execute (&quot;Select [FileCutting] from [tblDataCutting] Where OrderID = qdfOrders.ID &quot;)
File = oRs(&quot;FileCutting&quot;).Value

Sub InsertFromExcel (File)
  Dim objExcel
  Set objExcel = WScript.CreateObject(&quot;Excel.Application&quot;)
  Dim sOrderName, sMaterial, sDateIn, sPlateSize, sAmountPlates
  With objExcel
      With .Workbooks.Open(file)
          With .Sheets.Item(1)
            sOrderName = .Cells(1, 1).Value
            sMaterial = .Cells(2, 2).Value
            sDateIn = .Cells(3, 2).Value
            sPlateSize = .Cells(19, 2).Value
            sAmountPlates = .Cells(20, 2).Value
          End With
      End With
      .Quit
  End With
  Set objExcel = Nothing
  oConMDB.Execute (&quot;Select [FileCutting] from [tblDataCutting] Where OrderID = qdfOrders.ID &quot;)
End Sub</code></pre></div><p>НИКАК:(</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Sun, 19 Feb 2012 18:32:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57087#p57087</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=57054#p57054</link>
			<description><![CDATA[<div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>Таблица МатериалыВЗаказах - для каждой позиции в заказе указываются используемые материалы</p></blockquote></div><p>есть еще таблица <strong>Смета заказа</strong>, где отображаются все материалы используемые в заказе, видимо речь идет о ней...</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Sun, 19 Feb 2012 05:26:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=57054#p57054</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56973#p56973</link>
			<description><![CDATA[<p>Сходу сложно предложить оптимальный вариант, но например так:<br />1. Таблица-справочник Материалы<br /></p><div class="quotebox"><blockquote><p>ID | Наименование | Плотность | etc</p></blockquote></div><p>2. Таблица МатериалыВЗаказах - для каждой позиции в заказе указываются используемые материалы:<br /></p><div class="quotebox"><blockquote><p>ID | ID_Заказа | ID_ПозицииЗаказа | ID_ФайлыРаскроя | стол&nbsp; &nbsp;| ID(ЛДСП 1)<br />ID | ID_Заказа | ID_ПозицииЗаказа | ID_ФайлыРаскроя | стол&nbsp; &nbsp;| ID(ЛДСП 2)<br />ID | ID_Заказа | ID_ПозицииЗаказа | ID_ФайлыРаскроя | стол&nbsp; &nbsp;| ID(ДВПО)<br />ID | ID_Заказа | ID_ПозицииЗаказа | ID_ФайлыРаскроя | полка | ID(ЛДСП 1)</p></blockquote></div><p>3. Таблица ФайлыРаскроя<br /></p><div class="quotebox"><blockquote><p>ID | ID_Заказа | ПутьКФайлуРаскроя | etc</p></blockquote></div><p>etc - дополнительные колонки(в примере привёл минимум).</p><p>В результате добавляем заказ(tblOrders), создаём его позиции(tblOrdersProducts) -стол, стул и т.д.. <br />Для каждой позиции заказа из списка на основе справочника материалов указываем используемые материалы и заносим во вторую таблицу(кроме ID_ФайлыРаскроя).<br />Для заполнения третьей таблицы получаем список материалов по заказу для которых ID_ФайлыРаскроя пустой, назначаем файл раскроя для этого материала и его ID(который получится после добавления записи - не знаю есть ли возможность возврата ID после инсерта в MDB) записываем во вторую таблицу.</p><p>Если ничего не напутал, то такая структура позволит получать информацию о материалах, заказах/позициях заказа [не]использующих конкретный материал, файлах раскроя для заказов/материалов - в любой комбинации. Естественно для конкретного круга задач - есть и другие данные, и чтобы правильно их увязать нужно знать весь процесс который должен быть воплощён в БД(от заказа, до отгрузки клиенту - через заказа материалов, распределения материалов и задач по цехам, раскроям и прочей индивидуальной специфики конкретного пр-ва).</p><p>P.S. тема всё более смещается из концептуальной плоскости в сторону технической реализации конкретной(хотя и практически неописанной) технической задачи. Это требует значительно больше времени чем просто помощь советом, а свободного времени у меня мало. Подсказать какие-то моменты готов(в меру познаний и возможностей), тянуть проект - я пас.</p>]]></description>
			<author><![CDATA[null@example.com (BeS Yara)]]></author>
			<pubDate>Fri, 17 Feb 2012 12:39:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56973#p56973</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56783#p56783</link>
			<description><![CDATA[<div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>Полагаю дело обстоит так:Есть заказ (tblOrders). Позиции заказа описываются в tblOrdersProducts (связь с tblOrders по [tblOrders].[ID]). Для позиций заказа не являющихся покупным изделием(условно) существует файл раскроя</p></blockquote></div><p>Файлы раскроя существуют не для позиций заказа, а <strong>для всего заказа</strong>, но их может быть несколько в зависимости от количества используемых материалов. Например есть заказ - Кухня, состоит она из следующих материалов(листовых и погонных) - Корпус-ЛДСП 1,Корпус-ЛДСП 2, Корпус-ДВПО, Столешница... Или может быть так: заказ на офисную мебель - Шкаф 1 -10шт<br />Шкаф 2 -5шт<br />Стол 2 -7шт<br />Тумба 7шт<br />Всего много а материал один, знач и файл раскроя 1</p><p>...Воот, и как правильно выставить связь ????:/:/:/</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Mon, 13 Feb 2012 18:34:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56783#p56783</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56751#p56751</link>
			<description><![CDATA[<div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>...Или на одну позицию из заказа может быть несколько файлов раскроя?</p></blockquote></div><p>Да, может - в одном заказе - изделии, может быть до 4х-5ти видов материала<br /></p><div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>....структура БД не продумывалась, а ваяется по ходу дела. Если я прав, то сначала нужно определиться с функционалом и продумать структуру таблиц, включая связи между ними. Если это начальный этап внедрения и есть специалист знающий VBA + SQL, то может даже стоит перейти на более гибкий вариант...</p></blockquote></div><p>Здесь правда ваша !!!<br />я самостоятельно пытаюсь наладить функционал программы &quot;Склад и торговля&quot; под свои нужды, вот к сожалению специалистов знающих нет, вот и мучаю вас вопросами, сам пытаюсь разобраться но после 10-12 часового рабочего дня не в силах порой </p><p>Огромное спасибо за помощь</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Mon, 13 Feb 2012 14:06:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56751#p56751</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56734#p56734</link>
			<description><![CDATA[<div class="quotebox"><cite>NecroTYN пишет:</cite><blockquote><p>В общем колдовал -колдовал, наколдовал такой код, только не пашет..:(</p></blockquote></div><p>Судя по всему, это Ваш первый опыт работы со скриптами. Нужно внимательно смотреть код и разбираться как он работает - метод копирования не всегда подходит, и ничему не учит. Иногда даже полезно переписать пример кода с нуля самому, по ходу дела разбираясь в нём. И знания получите, и, возможно, ошибки в примере обнаружите(кто пишет сходу и без багов - пусть первый бросит в меня камень <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />).</p><div class="codebox"><pre><code>&quot;SELECT [FileCutting] FROM [tblDataCutting] WHERE [OrderID] = [ID] from [qdfOrders]&quot;</code></pre></div><p>Запрос ниочём, более того - второй FROM здесь это синтаксическая ошибка. Да и ID в запрос не подставлен.</p><div class="codebox"><pre><code>Do While Not (oRs.EOF)
  Call InsertFromExcel(oRs(OrderID).Value)
  oRsX.MoveNext
Loop</code></pre></div><p>Условие при переборе по oRs, а попытка перехода к следующей записи для рекордсета oRsX, который в Вашем скрипте даже не существует. Да и где, собственно, в приведённом коде процедура InsertFromExcel? Вы читаете сообщения об ошибках при запуске скрипта? Если программа подавляет сообщения об ошибках, запускайте скрипт с консоли передавая ей параметры вручную(естественно на тестовой базе). И никаких &quot;On Error GoTo Next&quot; кроме случаев когда это требуется для обработки ошибки в скрипте. Бездумное игнорирование ошибок делает работу скрипта непредсказуемой.</p><p>Смотрим далее: работаем с objExcel, выводим значения ячеек в консоль, закрываем эксель... А дальше попытка работать несуществующим рекордсетом(oRsX) закрытого объекта?</p><p>Опять не верно:<br /></p><div class="codebox"><pre><code>
.Range(&quot;R1C1&quot;).Value</code></pre></div><p>Если хочется обращаться к ячейки по номерам строки-колонки, то это делается иначе:<br /></p><div class="codebox"><pre><code>
.Cells(1, 1).Value</code></pre></div><p>В экселе есть хэлп, запись макросов, отладчик - достаточно много источников информации по работе в VBA. Остальное можно уже искать в MSDN или поиском по интернету. Довольно редко встречаются уникальные, ранее не обсуждавшиеся в сети задачи.</p><p>Вот как примерно может выглядеть процедура InsertFromExcel. В неё нужно передавать путь к файлу раскроя. Также в процедуре понадобятся ID заказа(можно передавать в качестве параметра, а можно через заданную вне процедуры переменную OrderID):<br /></p><div class="codebox"><pre><code>Sub InsertFromExcel(file)
  Dim objExcel
  Set objExcel = WScript.CreateObject(&quot;Excel.Application&quot;)
  Dim sOrderName, sMaterial, sDateIn, sPlateSize, sAmountPlates
  With objExcel
      With .Workbooks.Open(file)
          With .Sheets.Item(1)
            sOrderName = .Cells(1, 1).Value
            sMaterial = .Cells(2, 2).Value
            sDateIn = .Cells(3, 2).Value
            sPlateSize = .Cells(19, 2).Value
            sAmountPlates = .Cells(20, 2).Value
          End With
      End With
      .Quit
  End With
  Set objExcel = Nothing
  oConMDB.Execute &quot;SQL-запрос на вставку/обновление данных&quot;
End Sub</code></pre></div><p>Финальный запрос:<br /></p><div class="codebox"><pre><code>Set oRs = oConMDB.Execute(&quot;INSERT INTO [tblDataCutting] &quot; &amp; _
  &quot;(OrderName, Material, DateIn, PlateSize, AmountPlates) &quot; &amp; _
  &quot;VALUES (CStr(&#039;&quot; &amp; sOrderName &amp; &quot;&#039;), CStr(&#039;&quot; &amp; sMaterial &amp; &quot;&#039;), CDbl(&#039;&quot; &amp; sDateIn &amp; &quot;&#039;), CStr(&#039;&quot; &amp; sPlateSize &amp; &quot;&#039;), CCur(&#039;&quot; &amp; sAmountPlates &amp; &quot;&#039;))&quot;)</code></pre></div><p>Насчёт MDB не уверен, но в Trasact-SQL нет таких функций как CStr, CDbl, CCur и т.д. Приведение к нужному типу выполняйте в VB, или используйте <a href="http://msdn.microsoft.com/ru-ru/library/ms187928.aspx">Функции CAST и CONVERT (Transact-SQL)</a>.</p><br /><div class="quotebox"><cite>NecroTYN пишет:</cite><blockquote><p>Данный момент происходит точно так же ккак и с файлом сметы<br />В одном заказе может быть несколько типов материала</p></blockquote></div><p>Полагаю дело обстоит так:<br />Есть заказ (tblOrders). Позиции заказа описываются в tblOrdersProducts (связь с tblOrders по [tblOrders].[ID]). Для позиций заказа не являющихся покупным изделием(условно) существует файл раскроя(видимо для расчёта стоимости затраченного материала, хотя пока это не существенно). Тогда пути к файлам раскроя должны быть в таблице tblOrdersProducts. А в tblDataCutting уже хранится информация из файлов раскроя для тех позиций заказа к которым это применимо. Связь должна быть с tblOrdersProducts по ID заказа и ID позиции в заказе(если бы там было что-то вроде uniqueidentifier для позиции заказа, можно было бы ограничиться им, но в mdb это недоступно).</p><p>Не вижу смысла добавлять в tblDataCutting кучу строк содержащих только пути, а потом обновлять эти строки данными из файла раскроя(хотя технически это и реализуемо, скорее всего). Или на одну позицию из заказа может быть несколько файлов раскроя? Тогда, конечно, хранение пути к файлу в таблице с раскроями, пожалуй, логично.</p><p>У меня сложилось впечатление что структура БД не продумывалась, а ваяется по ходу дела. Если я прав, то сначала нужно определиться с функционалом и продумать структуру таблиц, включая связи между ними. Если это начальный этап внедрения и есть специалист знающий VBA + SQL, то может даже стоит перейти на более гибкий вариант - MS Access + MS SQL Server(MSDE, Express - бесплатны, ограничения скорее всего окажутся не существенными). Причём Access нужен прежде всего разработчику - на рабочих местах можно обойтись Access Runtime.</p>]]></description>
			<author><![CDATA[null@example.com (BeS Yara)]]></author>
			<pubDate>Mon, 13 Feb 2012 07:41:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56734#p56734</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56724#p56724</link>
			<description><![CDATA[<div class="codebox"><pre><code>&#039; VB Script Document
option explicit
&#039; константы для работы с ADO
Const adDouble = 5, adDate = 7, adCurrency = 6, adBoolean = 11, adVarWChar = 202, adLongVarWChar = 203
Const adUseClient = 3, adOpenStatic = 3, adLockOptimistic = 3, adCmdText = &amp;H1
Const adSchemaTables = 20, adSchemaColumns = 4
 
&#039;1. получаем ID заказа:
Dim oArgs &#039;объекта для чтения параметров строки запуска файла
Set oArgs = WScript.Arguments &#039;получение объекта для чтения параметров строки запуска файла

Dim OrderID
OrderID = Trim(Replace(oArgs(0),&quot;/&quot;,&quot;&quot;)) &#039;trim на всякий пожарный

&#039;2. получаем путь к файлу
Dim oConMDB
Set oConMDB = CreateObject(&quot;ADODB.Connection&quot;)
&#039;http://www.connectionstrings.com/access
With oConMDB
  .Provider = &quot;Microsoft.Jet.OLEDB.4.0&quot;
  .Open &quot;D:\Documents\Склад и торговля\Backups\2012-01-13.mdb&quot;
End With
 
Dim oRs, File
Set oRs = oConMDB.Execute(&quot;SELECT [FileCutting] FROM [tblDataCutting] WHERE [OrderID] = [ID] from [qdfOrders]&quot;)
Do While Not (oRs.EOF)
  Call InsertFromExcel(oRs(OrderID).Value)
  oRsX.MoveNext
Loop
 
&#039;3. открываем таблицу
Dim oConXLS
Set oConXLS = CreateObject(&quot;ADODB.Connection&quot;)
&#039;http://www.connectionstrings.com/excel
With oConXLS
  .Provider = &quot;Microsoft.Jet.OLEDB.4.0&quot;
  .Properties(&quot;Extended Properties&quot;).Value = &quot;Excel 8.0;IMEX=1;Hdr=Yes;Mode=Read;&quot;
  .CursorLocation = adUseClient
  .Open File
End With
Sheets(&quot;Select * from [Панели для раскроя$]&quot;)
Dim sOrderName, sMaterial, sDateIn, sPlateSize, sAmountPlates
sOrderID = OrderID


&#039;4. проходим по записям таблицы и забрасываем данные в MDB:
Option Explicit
Dim objExcel
Set objExcel = WScript.CreateObject(&quot;Excel.Application&quot;)
 
With objExcel
    With .Workbooks.Open(&quot;d:\aScripts\vbs\tmp\xl\РаскройИнфо.xlsx&quot;)
        With .Sheets.Item(1)
          wscript.echo .Range(&quot;R1C1&quot;).Value
          wscript.echo .Range(&quot;R2C2&quot;).Value
          wscript.echo .Range(&quot;R3C2&quot;).Value
          wscript.echo .Range(&quot;R19C2&quot;).Value
          wscript.echo .Range(&quot;R20C2&quot;).Value
        End With
    End With
    .Quit
End With
Set objExcel = Nothing
Do While Not (oRsX.EOF)
  sOrderName = Range(&quot;R1C1&quot;).Value
  sMaterial = Range(&quot;R2C2&quot;).Value
  sDateIn = Range(&quot;R3C2&quot;).Value
  sPlateSize = Range(&quot;R19C2&quot;).Value
  sAmountPlates = Range(&quot;R20C2&quot;).Value
  

  Set oRs = oConMDB.Execute(&quot;INSERT INTO [tblDataCutting] &quot; &amp; _
  &quot;(OrderName, Material, DateIn, PlateSize, AmountPlates) &quot; &amp; _
  &quot;VALUES (CStr(&#039;&quot; &amp; sOrderName &amp; &quot;&#039;), CStr(&#039;&quot; &amp; sMaterial &amp; &quot;&#039;), CDbl(&#039;&quot; &amp; sDateIn &amp; &quot;&#039;), CStr(&#039;&quot; &amp; sPlateSize &amp; &quot;&#039;), CCur(&#039;&quot; &amp; sAmountPlates &amp; &quot;&#039;))&quot;)
  oRsX.MoveNext
Loop</code></pre></div><p>В общем колдовал -колдовал, наколдовал такой код, только не пашет..:(<br /></p><div class="quotebox"><blockquote><p>Не очень понял задачу - путь к файлу содержитсЯ в mdb или выбирается вручную оператором(кладовщиком, менеджером)?</p></blockquote></div><p>Данный момент происходит точно так же ккак и с файлом сметы<br /></p><div class="quotebox"><blockquote><p>В одном заказе может быть несколько типов материала</p></blockquote></div><p>Здесь имеется ввиду несколько типов материала для раскроя(соответственно и несколько файлов раскроя), их просто привязываем к заказу<br /></p><div class="quotebox"><cite>Bes Yara пишет:</cite><blockquote><p>P.S. Интересно решить новую для себя проблему, разобраться с чем-то новым. Подсказать решение, в конце концов, особенно неочевидное для человека незнакомого с этой областью(сам иногда задаю вопросы). Но пережёвывать в пределах одной темы то что в ней уже есть - всякий интерес теряется. NecroTYN, мне кажется, Вам пора уже активно подключиться к решению Ваших задач.</p></blockquote></div><p>Я пытаюсь подключиться, но не всегда все могу понять</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Sun, 12 Feb 2012 19:09:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56724#p56724</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56699#p56699</link>
			<description><![CDATA[<div class="quotebox"><cite>NecroTYN пишет:</cite><blockquote><p>Пытался разобраться - не понял...:(<br />а как и куда вписать поля таблицы и путь к файлу раскроя ???</p></blockquote></div><p>Не очень понял задачу - путь к файлу содержитсЯ в mdb или выбирается вручную оператором(кладовщиком, менеджером)?<br />В ранее выложенном образце БД путь к файлу содержится в таблице tblDataCutting, в которую предполагается сбрасывать данные - откуда там берётся путь когда там ещё нет материалов? Этот путь должен быть в таблице, в которой перечисляются материалы по данному заказу. Тогда по запросу к этой таблице по ID заказа и ID материала получаем список файлов(путей), которые необходимо импортировать в БД.</p><p>Например так::<br />1. Берёте код из поста #18.<br />2. Меняете запрос исходя из того где что хранится. В результате нужно будет получить таблицу из одного столбца - ID материала(допустим столбец называется MatID).<br />3. Вместо:<br /></p><div class="codebox"><pre><code>File = oRs(&quot;Notes&quot;).Value</code></pre></div><p>выполняем перебор полученных путей:<br /></p><div class="codebox"><pre><code>
Do While Not (oRs.EOF)
  Call InsertFromExcel(oRs(MatID).Value)
  oRsX.MoveNext
Loop</code></pre></div><p>где InsertFromExcel это процедура в которую включаем чтение значений из экселевского файла (пример в посте #24). Для каждого .Range(&quot;B19&quot;).Value(подставляем нужную ячейку вместо B19) вызываем проедуру вставки данных в mdb(процедуру создаём по примеру поста #18, 4-ый этап).</p><p>P.S. Интересно решить новую для себя проблему, разобраться с чем-то новым. Подсказать решение, в конце концов, особенно неочевидное для человека незнакомого с этой областью(сам иногда задаю вопросы). Но пережёвывать в пределах одной темы то что в ней уже есть - всякий интерес теряется. <strong>NecroTYN</strong>, мне кажется, Вам пора уже активно подключиться к решению Ваших задач.</p>]]></description>
			<author><![CDATA[null@example.com (BeS Yara)]]></author>
			<pubDate>Sun, 12 Feb 2012 09:37:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56699#p56699</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56692#p56692</link>
			<description><![CDATA[<p><strong>BeS Yara</strong><br /></p><div class="quotebox"><blockquote><div class="codebox"><pre><code>&#039; VB Script Document
Option Explicit
Dim objExcel
Set objExcel = WScript.CreateObject(&quot;Excel.Application&quot;)

With objExcel
    With .Workbooks.Open(&quot;d:\aScripts\vbs\tmp\xl\РаскройИнфо.xlsx&quot;)
        With .Sheets.Item(1)
          wscript.echo .Range(&quot;B19&quot;).Value
        End With
    End With
    .Quit
End With
Set objExcel = Nothing</code></pre></div><p>источник: поиск по форуму(&quot;excel vbscript&quot;) =&gt; первая найденная тема, последний пост, вторая ссылка =&gt; <a href="http://forum.script-coding.com/viewtopic.php?id=5675">2-ое сообщение</a> =&gt; 7 строк стереть, 1 добавить</p></blockquote></div><p>Пытался разобраться - не понял...:(<br />а как и куда вписать поля таблицы и путь к файлу раскроя ???</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Sat, 11 Feb 2012 18:23:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56692#p56692</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56626#p56626</link>
			<description><![CDATA[<div class="quotebox"><cite>NecroTYN пишет:</cite><blockquote><p>Установлен офис 2010, при сохранении файла он открывается автоматически и выбор сохранкеия происходит вручную</p></blockquote></div><p>У меня установлен офис 2003, и при попытке открыть xlsx с расширением xls он выдаёт ошибку о неверном формате или повреждённом файле. При правильном расширении открывает нормально(правда появляется окошко при конвертации в формат 2003, но оно само закрывается по окончании). Так что если офис 2010 не на всех компьютерах где этот скрипт предполагается использовать, нужно иметь это ввиду.<br /></p><div class="quotebox"><cite>NecroTYN пишет:</cite><blockquote><p>В одном заказе может быть несколько типов материала</p></blockquote></div><p>Значит помимо ID заказа нужно ещё добавлять ID материала:<br /></p><div class="codebox"><pre><code>SELECT [Нужное поле] FROM [Нужная таблица] WHERE [колонка с ID заказа] = [наш ID заказа] AND [колонка с ID материала] = [наш ID материала]</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (BeS Yara)]]></author>
			<pubDate>Fri, 10 Feb 2012 05:58:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56626#p56626</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56625#p56625</link>
			<description><![CDATA[<p><strong>BeS Yara</strong><br /></p><div class="quotebox"><blockquote><p>Для такого варианта:<br />1. На компьютере нужен установленный МС Офис(в случае ADO или разбора XML офис не требуется).<br />2. Для 2003-го офиса должен быть установлен конвертер файлов 2007-го офиса.<br />3. Файл должен иметь расширение соответствующее содержимому. В Вашем случае это не XLS, а XLSX.</p></blockquote></div><p>Установлен офис 2010, при сохранении файла он открывается автоматически и выбор сохранкеия происходит вручную<br /></p><div class="quotebox"><blockquote><p>Это существенно? Если в tblCuttingData есть колонка ID, то в запросе меняется только название поля и название таблицы:</p></blockquote></div><p>В одном заказе может быть несколько типов материала</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Fri, 10 Feb 2012 05:45:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56625#p56625</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56622#p56622</link>
			<description><![CDATA[<div class="quotebox"><cite>NecroTYN пишет:</cite><blockquote><p>Мне еще подсказывают что можно пробоать так:<br /></p><div class="codebox"><pre><code>Sheets(&quot;Лист1&quot;).Range(&quot;A1&quot;).Value.</code></pre></div><p>но чет я не добился...</p></blockquote></div><p>Для такого варианта:<br />1. На компьютере нужен установленный МС Офис(в случае ADO или разбора XML офис не требуется).<br />2. Для 2003-го офиса должен быть установлен конвертер файлов 2007-го офиса.<br />3. Файл должен иметь расширение соответствующее содержимому. В Вашем случае это не XLS, а XLSX.<br /></p><div class="codebox"><pre><code>&#039; VB Script Document
Option Explicit
Dim objExcel
Set objExcel = WScript.CreateObject(&quot;Excel.Application&quot;)

With objExcel
    With .Workbooks.Open(&quot;d:\aScripts\vbs\tmp\xl\РаскройИнфо.xlsx&quot;)
        With .Sheets.Item(1)
          wscript.echo .Range(&quot;B19&quot;).Value
        End With
    End With
    .Quit
End With
Set objExcel = Nothing</code></pre></div><p>источник: поиск по форуму(&quot;excel vbscript&quot;) =&gt; первая найденная тема, последний пост, вторая ссылка =&gt; <a href="http://forum.script-coding.com/viewtopic.php?id=5675">2-ое сообщение</a> =&gt; 7 строк стереть, 1 добавить</p><p>Имейте ввиду, что при каждом запуске скрипта будет запускаться Excel. Если комп не сильно мощный, или уже много чего открыто, скрипт может работать не слишком быстро(на моём C2D P8600 @2.4GHz с 4Gb ОЗУ скрипт отрабатывает в среднем за 1.5-1.9 сек). </p><div class="quotebox"><cite>NecroTYN пишет:</cite><blockquote><p>...еще в данном случае файл путь к файлу xls&nbsp; находится в таблице tblCuttingData поле CuttingFile</p></blockquote></div><p>Это существенно? Если в tblCuttingData есть колонка ID, то в запросе меняется только название поля и название таблицы:<br /></p><div class="codebox"><pre><code>SELECT [Нужное поле] FROM [Нужная таблица] WHERE [колонка с ID] = [наш ID]</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (BeS Yara)]]></author>
			<pubDate>Fri, 10 Feb 2012 04:12:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56622#p56622</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56610#p56610</link>
			<description><![CDATA[<p><strong>BeS Yara</strong><br />Привет !!!<br /></p><div class="quotebox"><blockquote><p>Если формат данный(число, расположение и &quot;физический смысл&quot; строк) всегда один и тотже(грубо говоря, размер плиты это ВСЕГДА ячейка B19)</p></blockquote></div><p>Да, это именно так<br />Мне еще подсказывают что можно пробоать так:<br /></p><div class="codebox"><pre><code>Sheets(&quot;Лист1&quot;).Range(&quot;A1&quot;).Value.</code></pre></div><p>но чет я не добился...<br />...еще в данном случае файл путь к файлу xls&nbsp; находится в таблице tblCuttingData поле CuttingFile</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Thu, 09 Feb 2012 16:56:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56610#p56610</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56413#p56413</link>
			<description><![CDATA[<p>Добавление данных аналогично предидущему варианту. Отличие будет в получении данных из файла т.к.:<br />1. &quot;*.xls такого типа&quot; на самом деле не xls. Смена расширения не сделает из 2007-го экселя 2003-ий формат :)<br />2. Транспонированная таблица для ADO подходит слабо. Хотя(теоретически) что-то можно было бы придумать, но лучше попробовать организовать формирование таблицы в кошерном для последующей загрузки виде.<br />3. Данный файл это фактически архив(ZIP), содержащий набор документов(в основном XML). Так что вижу два возможных варианта работы с данным вариантом входного файла - использовать API Office2007(у меня такой возможности нет), или разбираться в формате файла и выдирать нужные данные из xml-ек. Если формат данный(число, расположение и &quot;физический смысл&quot; строк) всегда один и тотже(грубо говоря, размер плиты это ВСЕГДА ячейка B19), а лист всегда один, то достаточно наладить разбор XML-ки \xl\worksheets\sheet1.xml если нужны числовые данные, и добавочно \xl\sharedStrings.xml если нужны строковые данные.</p><p>Например, находим в sheet1.xml соответствующий нод(далее исключительно умозаключения на основе поверхностного анализа :), кто хочет знать Правду, тому путь в MSDN):<br /></p><div class="codebox"><pre><code>
&lt;row r=&quot;19&quot; spans=&quot;1:3&quot; x14ac:dyDescent=&quot;0.25&quot;&gt;
 &lt;c r=&quot;A19&quot; t=&quot;s&quot;&gt;
  &lt;v&gt;14&lt;/v&gt; 
  &lt;/c&gt;
 &lt;c r=&quot;B19&quot; t=&quot;s&quot;&gt;
  &lt;v&gt;26&lt;/v&gt; 
  &lt;/c&gt;
  &lt;/row&gt;</code></pre></div><p>Насколько я понял, [t=&quot;s&quot;] показывает что содержимое ячейки не число, точнее данные представленны как строка. Тот-же тип &quot;s&quot; идёт для ячейки с датой(которая после конвертирования в Excel2003 имеет общий формат). Если тип не указан, то в тэге v находится значение, если указан - индекс соответствующего нода в sharedStrings(может для нестроковых и не численных данных могут быть и другие хранилища - см. [Content_Types].xml).<br />Получаем индекс строки - 26.<br />Открываем sharedStrings.xml, находим 27-ой по счёту(индексы идут от нуля) элемент:<br /></p><div class="codebox"><pre><code>
&lt;si&gt;
  &lt;t&gt;2750x1830&lt;/t&gt; 
&lt;/si&gt;</code></pre></div><p>Бинго :).<br />Можно, конечно анализировать ещё глубже - находить нужную строку по содержимому первой колонки, и искать соответствующие значения в остальных. Другими словами, писать полноценный парсер для офисного формата :)<br />С XML особо не работал, но на форуме были примеры работы с XML в vbs(для получения курсов валют с ЕЦБ мне сгодилось, с кое какими добавками из MSDN).</p><p>З.Ы. Если я правильно понимаю результаты поверхностного поиска по MSDN, то в отсутствии офиса с этим форматом(XLSX, ) вполне можно работать из .NET. В свете способов запуска импортирования данных(запуск программы по срабатыванию триггера), нет существенной разницы что будет запускаться - vbs или exe. Visual Studio Express бесплатна :)<br />З.З.Ы. Написал ответ.... Подумал... Нашел <a href="http://msdn.microsoft.com/en-us/library/dd922181(office.12).aspx">[MS-XLSX]: Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML File Format</a>. 291 страница тайного знания на языке оригинала(в PDF документе с водяным знаком &quot;Предварительно&quot;, зато свежачёк: &quot;Release: Sunday, January 22, 2012&quot;). И, возможно, потребуются дополнительные источники информации. Пока времени на изучения этого талмуда у меня нет(как и насущной необходимости). Так что тут я пас.</p>]]></description>
			<author><![CDATA[null@example.com (BeS Yara)]]></author>
			<pubDate>Sat, 04 Feb 2012 10:16:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56413#p56413</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Экспорт данных из книги Excel в таблицу б/д Access]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56381#p56381</link>
			<description><![CDATA[<p><strong>BeS Yara</strong><br />Спасибо со всем разобрался, все получилось...<br />Есть еще одна задача, а как произвести экспорт из файла <a href="http://ifolder.ru/28501560"><strong>*.xls такого типа</strong></a> в таблицу tblDataCutting &quot;Данные о раскрое&quot;??? <br />т.е. если в предыдущем разе мы экспортировали готовую таблицу, то в данном случае нужно выбрать выборочные значения из перевернутой таблицы</p><br /><p> Данные из строки &#039;&#039;заказ&#039;&#039; нужно записать в поле OrderName<br /> Данные из строки &#039;&#039;Материал&#039;&#039; нужно записать в поле Material<br /> Данные из строки &#039;&#039;Дата&#039;&#039; нужно записать в поле DateIn<br /> Данные из строки &#039;&#039;Размер плиты&#039;&#039; нужно записать в поле PlateSize<br /> Данные из строки &#039;&#039;Количество плит материала&#039;&#039; нужно записать в поле AmountPlates</p>]]></description>
			<author><![CDATA[null@example.com (NecroTYN)]]></author>
			<pubDate>Sat, 04 Feb 2012 05:44:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56381#p56381</guid>
		</item>
	</channel>
</rss>
