<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=41552&amp;view=findpost&amp;p=270462</guid>
        <pubDate>Thu, 25 Dec 2003 16:30:21 +0000</pubDate>
        <title>Как работать с Excel в Дельфи</title>
        <link>https://forum.sources.ru/index.php?showtopic=41552&amp;view=findpost&amp;p=270462</link>
        <description><![CDATA[Vit: Чтобы работать с Excel из Delphi cуществует два основных пути. Первый - это создание его как COM объект. Таким же образом можно работать и с Word, Access, Outlook(не Express) и многими другими программами.<br>
<br>
Исходный код:  <br>
<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line"> Excel, WorkBook, Sheet: Variant;</div><div class="code_line">begin</div><div class="code_line"> Excel := CreateOleObject(&#39;Excel.Application&#39;);</div><div class="code_line"> Excel.WorkBooks.Open(FileName,False);</div><div class="code_line"> WorkBook := Excel.WorkBooks.Item[1];</div><div class="code_line"> Sheet := Workbook.Sheets.Item[3];</div><div class="code_line"> Sheet.Cells[1,2]:=&#39;ASDFG&#39;;</div><div class="code_line"> Sheet.Cells[2,2]:=230;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
 <br>
<br>
<br>
<br>
<br>
Все объекты и методы Офиса можно посмотреть в help&#39;е Офиса.<br>
Второй способ (для таблицы Excle) это подключение через DAO(Data Active Objects) или ODBC. <br>
<br>
Автор ответа: Fantasist <br>
<br>
<br>
Чтобы использовать только стандартные компоненты давайте попробуем работать с Excel через ADO. Это не самый быстрый и далеко не первый по возможностям метод (DAO работает на порядок быстрее и предоставляет куда больше возможностей), но ADO компоненты входят в стандартную поставку 5 и 6 Дельфи. Итак заходим в Панель управления Windows, идем в свойства ODBC, делаем DSN используя Excel драйвер, не забываем указать в свойствах на файл Excel. Закрываем ODBC, открываем Дельфи. Ставим на форму ADOConnection. Идем в ConnectionString - строим строку подключения - надо выбрать только ODBC провайдер и на следующей вкладке указать сделанный DSN, остальные опции в большинстве случаев можно оставить как есть. Строка получена. Кстати ее можно вообще упростить до вида: &quot;DSN=MyDsn&quot;. Теперь вам доступны листы файла как таблицы а весь файл как база данных. Подключаем ADOQuery к ADOConnection. Cоздаем таблицу, т.е. новый лист - путем запуска следующей квери:<br>
<br>
SQL:  <br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Create Table MyTable1 (</div><div class="code_line"> Field1 varchar(20),</div><div class="code_line"> Field2 varchar(10)  )</div></ol></div></div></div></div><br>
<br>
 <br>
<br>
<br>
Снова переходим в дизайн - ставим на форму ADOTable, указываем как Connection наш компонент с ADOConnection, теперь если кликнуть на свойстве TableName - вы сможете увидеть в списке сделанную нами таблицу &quot;MyTable1&quot;. Соедините таблицу с DBGrid - убедитесь что работа с таблицей в Excel мало отличается от работы с другими базами данных. <br>
<br>
Взято с <a class='tag-url' href='http://forum.vingrad.ru' target='_blank'>http://forum.vingrad.ru</a><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;</div><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;xlCellTypeLastCell = {text}00000B;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;XLApp, Sheet: OLEVariant;</div><div class="code_line">&nbsp;&nbsp;RangeMatrix: Variant;</div><div class="code_line">&nbsp;&nbsp;x, y, k, r: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Screen.Cursor:=crAppStart;</div><div class="code_line">&nbsp;&nbsp;Result := False;</div><div class="code_line">&nbsp;&nbsp;XLApp := CreateOleObject(&#39;Excel.Application&#39;);</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;XLApp.Visible := False;</div><div class="code_line">&nbsp;&nbsp; &nbsp;XLApp.Workbooks.Open(AXLSFile);</div><div class="code_line">&nbsp;&nbsp; &nbsp;Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];</div><div class="code_line">&nbsp;&nbsp; &nbsp;Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;</div><div class="code_line">&nbsp;&nbsp; &nbsp;x := XLApp.ActiveCell.Row;</div><div class="code_line">&nbsp;&nbsp; &nbsp;y := XLApp.ActiveCell.Column;</div><div class="code_line">&nbsp;&nbsp; &nbsp;AGrid.RowCount := x;</div><div class="code_line">&nbsp;&nbsp; &nbsp;AGrid.ColCount := y; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;RangeMatrix := XLApp.Range[&#39;A1&#39;, XLApp.Cells.Item[X, Y]].Value;</div><div class="code_line">&nbsp;&nbsp; &nbsp;k := 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for r := 1 to y do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Inc(k, 1);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;AGrid.RowCount := k + 1; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;until k &#62; x; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;RangeMatrix := Unassigned;</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;if not VarIsEmpty(XLApp) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;XLApp.Quit; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;XLAPP := Unassigned; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Sheet := Unassigned; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Result := True; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end; &nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;Screen.Cursor:=crDefault;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
Автор ответа: Kostas]]></description>
        <author>Vit</author>
        <category>ActiveX, COM, DCOM, CORBA, MIDAS, интерфейсы, OLE, DDE</category>
      </item>
	
      </channel>
      </rss>
	