purebasic.info

PureBasic forum
Текущее время: Вт апр 24, 2018 12:15 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Библиотека для работы с Excel
СообщениеДобавлено: Вс дек 23, 2012 12:19 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
Интересная библиотека для работы с Excel, сделанная на основе COMatePLUS (для PB 5.0)
Состоит из двух файлов:
ExcelFunktion.pbi
ExcelConstants.pbi
файлы в архиве во вложении.

Позволяет работать с файлами XLS с помощью простых функций, маленький пример:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
XIncludeFile "ExcelFunktion.pbi"
DisableExplicit
 
Dim A.s(5)
Dim B.s(5)
Dim C.d(5)
 
Define.COMateObject MyExcelFile1
Define.s FileName
 
FileName=OpenFileRequester("Укажите файл Excel","book_1.xls","*.xls",0)
 
MyExcelFile1=XLSFunc_OpenExcelFile(FileName)
XLSFunc_ExcelVisible(MyExcelFile1, #True)
 
 
; Читаем значения из ячеек файла Excel
For i=1 To 5
  A(i)=XLSFunc_ReadCellS(MyExcelFile1,1,i)
  B(i)=XLSFunc_ReadCellS(MyExcelFile1,3,i)
  Debug A(i)+" ## "+B(i)
Next i
 
 
; Вписываем значения в ячейки
For i=1 To 5
  XLSFunc_WriteCellS(MyExcelFile1,7,i,"text_"+Str(i))
  XLSFunc_WriteCellZ(MyExcelFile1,9,i,C(i)+i)
Next i  
 
Delay(5000)
XLSFunc_CloseExcelAll(MyExcelFile1)
 
ShowErrorIfAny()
;XLSFunc_CreateExcelFile("C:\book_2.xls")
 



Библиотека содержит очень много функций, но не со всеми пока разобрался, например не очень понятна XLSFunc_CreateExcelFile() и как работать с разными листами в книге.

На мой взгляд - самый удобный инструмент для работы с файлами Excel для PureBasic.

Во вложениях xls-файл для примера и файлы библиотеки.


Вложения:
Комментарий к файлу: файлы библиотеки
COMatePLUS_Excel.zip [17.7 KiB]
Скачиваний: 62
Комментарий к файлу: xls-файл для примера
book_1.zip [1.32 KiB]
Скачиваний: 366
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 23, 2012 8:07 am 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 80 раз.
Пункты репутации: 24
Спасибо, пригодится 8)

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 27, 2012 2:44 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
Небольшой пример с созданием и активацией листов (Worksheets) в книге Excel, чтением и записью числовых и строковых данных в ячейки:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
; тест ExcelFunktion.pbi
XIncludeFile "ExcelFunktion.pbi"
DisableExplicit
 
Define.COMateObject MyExcelFile1
Define.s FileName
 
Dim A.f(7)
Dim B.l(7)
String.s=""
 
; Выбираем и открываем файл Excel
FileName=OpenFileRequester("Укажите файл Excel","book_2.xls","*.xls",0)
MyExcelFile1=XLSFunc_OpenExcelFile(FileName)
XLSFunc_ExcelVisible(MyExcelFile1, #True)
 
; Активируем требуемый лист
XLSFunc_ChangeToWorksheet(MyExcelFile1,"Исходные данные")
 
 
; Читаем значения из ячеек активного листа
For i=1 To 7
  String=XLSFunc_ReadCellS(MyExcelFile1,i+1,2)
  String=ReplaceString(String, ",", ".")
  A(i)=ValF(String)
  String=XLSFunc_ReadCellS(MyExcelFile1,i+1,3)
  B(i)=Val(String)
Next i
 
 
Delay(2500)
; Добавляем новый лист в конец книги для вывода результатов
XLSFunc_AddWorksheetAfter(MyExcelFile1,"Результаты")
XLSFunc_ChangeToWorksheet(MyExcelFile1,"Результаты")
 
 
; Вписываем значения в ячейки активного листа
XLSFunc_WriteCellS(MyExcelFile1,1,2,"A+B")
For i=1 To 7
  XLSFunc_WriteCellS(MyExcelFile1,i+1,1,Str(i))
  XLSFunc_WriteCellZ(MyExcelFile1,i+1,2,A(i)+B(i))
Next i
 
ShowErrorIfAny()
End



Во вложении xls-файл для примера


Вложения:
Комментарий к файлу: xls-файл для примера
book_2.zip [3.72 KiB]
Скачиваний: 260
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт мар 14, 2013 2:25 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
У меня почему-то не работает функция XLSFunc_CreateExcelFile("C:\book.xls")
Код:
1
2
3
4
5
6
7
8
9
10
XIncludeFile "ExcelFunktion.pbi" 
DisableExplicit
NewExcelFile = XLSFunc_CreateExcelFile("C:\book.xls")
 
Debug NewExcelFile  ; не равен нулю
For i=1 To 5
  XLSFunc_WriteCellS(MyExcelFile1,7,i,"text_"+Str(i))
  XLSFunc_WriteCellZ(MyExcelFile1,9,i,i+100)
Next i  
XLSFunc_ExcelVisible(NewExcelFile, #True)


Файл не создается и как следствие при записи (XLSFunc_WriteCellS()) - ошибка
Кто знает, подскажите куда копать
PS Использую Office 2003 Win XP

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 15, 2013 12:33 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
pablov
Сейчас пытаюсь разобраться с этой проблемой

В версиях PureBasic 5.10 и 5.11 появляется и еще одна проблема с библиотекой COMatePlus.pbi:

Цитата:
Line 89: Naitive types can`t be used with pointers


собственно код, вызывающий ошибку (строка 89 выделена):
Цитата:
Structure _membersCOMateClass
*vTable.i
iDisp.iDispatch
containerID.i
hWnd.i
*eventSink._COMateEventSink
EndStructure


Для работы с данной библиотекой пришлось откатить PB до версии 5.0


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 15, 2013 1:21 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
Загадка XLSFunc_CreateExcelFile решена.

На основе примера от Falko, взятого отсюда: http://forums.purebasic.com/german/view ... 4&start=70
привожу следующий код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
XIncludeFile "ExcelFunktion.pbi"
Define WorkDir.s, DATEI.s, ES.COMateObject
Define i.l
 
WorkDir=GetCurrentDirectory()
DATEI=WorkDir+"Test.xls"
 
ES=XLSFunc_CreateExcelFile(WorkDir)
Debug COMate_GetLastErrorDescription()
 
XLSFunc_ExcelVisible(ES,#False)
Debug COMate_GetLastErrorDescription()
 
 
; пока не разобрался с этим
;XLSFunc_PageSetup(ES,#xlLandscape,1,1,2.5,1)
;Debug COMate_GetLastErrorDescription()
 
 
XLSFunc_RenameActiveSheet(ES,"Jan")
Debug COMate_GetLastErrorDescription()
 
 
XLSFunc_AddWorksheetAfter(ES,"Feb")
Debug COMate_GetLastErrorDescription()
 
 
XLSFunc_AddWorksheetAfter(ES,"Mar")
Debug COMate_GetLastErrorDescription()
 
 
XLSFunc_ChangeToWorksheet(ES,"Mar")
For i=1 To 5
  XLSFunc_WriteCellS(ES,7,i,"text_"+Str(i))
  XLSFunc_WriteCellZ(ES,9,i,i+100)
Next i
Debug COMate_GetLastErrorDescription()
 
 
XLSFunc_SaveAsWorkbook(ES,DATEI,#xlNormal)
Debug COMate_GetLastErrorDescription()
 
 
XLSFunc_ExcelVisible(ES,#True)
Debug COMate_GetLastErrorDescription()
 
 
XLSFunc_CloseWorkbook(ES)
Debug COMate_GetLastErrorDescription()



Кажется в этой библиотеке реализован несколько странный подход к работе с файлами.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 15, 2013 7:33 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
22vlad писал(а):
собственно код, вызывающий ошибку (строка 89 выделена):

Влад, это мы обсуждали здесь
22vlad писал(а):
Загадка XLSFunc_CreateExcelFile решена.

Спасибо, сейчас проверил, работает. :D
Т.е. Создание пустого файла это:
Код:
1
2
3
4
5
6
7
XIncludeFile "ExcelFunktion.pbi" 
Define WorkDir.s, DATEI.s, ES.COMateObject
WorkDir=GetCurrentDirectory()
DATEI=WorkDir+"Test.xls"
ES=XLSFunc_CreateExcelFile(WorkDir)
XLSFunc_SaveAsWorkbook(ES,DATEI,#xlNormal)
XLSFunc_CloseWorkbook(ES)


_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 15, 2013 8:06 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Упс, сейчас заметил, после создания пустого файла xls в диспетчере остается висеть процесс excel.exe

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 15, 2013 10:23 am 
Не в сети
студент

Зарегистрирован: Пт мар 15, 2013 10:18 am
Сообщений: 1
Откуда: Минск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Добрый день.
возникает необходимость постоянно работать с таблицами excel. мне хотелось этот процесс немного автоматизировать.
подскажите как одновременно открыть несколько книг и создать новую.

Спасибо


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 15, 2013 10:32 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
22vlad писал(а):
собственно код, вызывающий ошибку (строка 89 выделена)
Убери тип, т. е. должно быть.
Код:
1
*vTable


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 15, 2013 3:59 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
FlashKiller писал(а):
возникает необходимость постоянно работать с таблицами excel. мне хотелось этот процесс немного автоматизировать.
подскажите как одновременно открыть несколько книг и создать новую.

А в чем проблема? Влад дал ссылку на библиотеку для работы с файлами Excel Походу, она умеет делать с ёкселем фсе, акромя создания файла. Но этот момент я обошел использовав библиотеку Excel_Writer.

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 15, 2013 11:11 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
pablov писал(а):
Походу, она умеет делать с ёкселем фсе, акромя создания файла.

Почему? Эта библиотека прекрасно создает файлы.

pablov писал(а):
Упс, сейчас заметил, после создания пустого файла xls в диспетчере остается висеть процесс excel.exe

В конце программы надо применять
Код:
1
XLSFunc_CloseExcelAll(ES)


и процесс excel.exe будет завершен.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб мар 16, 2013 12:08 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
FlashKiller писал(а):
возникает необходимость постоянно работать с таблицами excel. мне хотелось этот процесс немного автоматизировать.
подскажите как одновременно открыть несколько книг и создать новую.


Пример - читаем данные из 2-х файлов, создаем третий и пишем в него результат:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
XIncludeFile "ExcelFunktion.pbi"
 
 
Dim A.s(5)
Dim B.s(5)
Dim C.d(5)
Dim D.s(5)
 
Define.COMateObject ExcelFile1, ExcelFile2, ExcelFile3
Define.s FileName1, FileName2, FileName3, WorkDir
Define.l i
 
; выбираем файлы для чтения данных
FileName1=OpenFileRequester("Укажите первый файл Excel","book_1.xls","*.xls",0)
FileName2=OpenFileRequester("Укажите второй файл Excel","book_2.xls","*.xls",0)
WorkDir=GetPathPart(FileName1)
 
; открываем выбранные файлы
ExcelFile1=XLSFunc_OpenExcelFile(FileName1)
ExcelFile2=XLSFunc_OpenExcelFile(FileName2)
 
XLSFunc_ExcelVisible(ExcelFile1, #False)
XLSFunc_ExcelVisible(ExcelFile2, #False)
 
 
; Читаем значения из ячеек файла ExcelFile1
For i=1 To 5
  A(i)=XLSFunc_ReadCellS(ExcelFile1,1,i)
  A(i)=ReplaceString(A(i),",",".")
  C(i)=ValD(A(i))
  B(i)=XLSFunc_ReadCellS(ExcelFile1,3,i)
Next i
 
; Читаем значения из ячеек файла ExcelFile2
For i=1 To 5
  D(i)=XLSFunc_ReadCellS(ExcelFile2,1,i)
Next i
 
 
 
; создаем файл для записи результатов
FileName3=WorkDir+"book_3.xls"
ExcelFile3=XLSFunc_CreateExcelFile(WorkDir)
 
XLSFunc_ExcelVisible(ExcelFile3,#False)
XLSFunc_AddWorksheetAfter(ExcelFile3,"Result")
XLSFunc_ChangeToWorksheet(ExcelFile3,"Result")
 
; пишем значения в ячейки файла ExcelFile3
For i=1 To 5
  XLSFunc_WriteCellS(ExcelFile3,7,i,B(i))
  XLSFunc_WriteCellZ(ExcelFile3,9,i,C(i))
  XLSFunc_WriteCellS(ExcelFile3,11,i,D(i))
Next i
 
; сохраняем файл ExcelFile3
XLSFunc_SaveAsWorkbook(ExcelFile3,FileName3,#xlNormal)
 
XLSFunc_CloseWorkbook(ExcelFile1)
XLSFunc_CloseWorkbook(ExcelFile2)
XLSFunc_CloseWorkbook(ExcelFile3)
 
XLSFunc_CloseExcelAll(ExcelFile1)
XLSFunc_CloseExcelAll(ExcelFile2)
XLSFunc_CloseExcelAll(ExcelFile3)
 
End



файлы xls во вложении


Вложения:
books.zip [6.93 KiB]
Скачиваний: 225


Последний раз редактировалось 22vlad Сб мар 16, 2013 12:15 am, всего редактировалось 1 раз.
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб мар 16, 2013 12:15 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 931
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
pablov, Пётр спасибо, понял почему версии PB 5.10 и 5.11 не работают с COMatePlus. Интересно, а на официальном сайте библиотеку поправят:
http://www.purecoder.net/comate.htm
или самому придется делать


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб мар 16, 2013 3:52 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
22vlad писал(а):
В конце программы надо применять

Ага, спасибо. Просто нужно было срочно спаять утилиту и не было времени разбираться

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB