powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выбрать определенный столбец xlsx файла
23 сообщений из 23, страница 1 из 1
Выбрать определенный столбец xlsx файла
    #38741456
Подготовил курсор для копирования данных из xlsx файла. Теперь как можно выбрать например 1, 5 или 8-е поле из xlsx файла в курсор?
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741541
новичок20142014, никто не знает что ли?
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741551
Или все столбцы как скопировать в курсор?
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741582
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебе уже тут ответили http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1114675&msg=16549551
Непонятно - там и уточняй. Не надо топики плодить.
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741587
Dima T, ничего не ответили мне там. Там про цвет начали говорить и считать количество строк, от 8 до 28, хотя их там может быть гораздо больше.
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741601
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок20142014Dima T, ничего не ответили мне там. Там про цвет начали говорить и считать количество строк, от 8 до 28, хотя их там может быть гораздо больше.
Тебе там подход показали для решения твоей задачи. Читаешь по одной ячейке и сохраняешь куда тебе надо. Можешь в курсор.
Есть другие способы, но они сложнее. Этот самый простой.
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741626
Вот по такому способу я понимаю что какие-то ячейки выводятся на экран.
xl = CREATEOBJECT ('Excel.Application')
xl.Workbooks.Add("C:\Book.xlsx")
? xl.Cells(7,18).Value
? xl.Cells(7,18).Interior.Color

Но я не понимаю например как получить все строки 2-го столбца, или 5-го столбца в цикле. Строк может быть и 1000. Как вот реализовать цикл например для копирования всех строк 2-го столбца? Один пример покажите что вот таким кодом можно выбрать строки 2-го столбца и потом копировать, и т.д. их
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741642
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В экселе нет "концов". Лично я делаю так: читаю последовательно, как получил 10 пустых строк подряд - считаю что конец таблицы.
примерно так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
lnEmpty = 0
lnRow = 0
do while lnEmpty < 10
   lnRow = lnRow + 1
   lcVal = xl.Cells(7,lnRow).Value
   if empty(lcVal)
     lnEmpty = lnEmpty + 1
     loop
   endif
   lnEmpty = 0
   ? lcVal
enddo
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741653
Dima T, А можете прокомментировать что делает ваш код?

lnEmpty = 0
lnRow = 0
do while lnEmpty < 10 //тут наверное цикл пока меньше 10 пустых строк
lnRow = lnRow + 1 // тут ?
lcVal = xl.Cells(7,lnRow).Value //?
if empty(lcVal) //?
lnEmpty = lnEmpty + 1//?
loop
endif
lnEmpty = 0 //?
? lcVal //?
enddo
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741680
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок20142014, а где твоя смекалка и наблюдательность?
Вот тебе ещё одна разведка.
xl = CREATEOBJECT ('Excel.Application')
xl.Workbooks.Add('C:\Book.xlsx')
? xl.Cells(29,1).Value
В этой ячейке у тебя значение "Всего:"
Организуешь цикл:
RowNo = 8
DO WHILE VARTYPE (xl.Cells[RowNo,1]) != 'C' OR xl.Cells[RowNo,1] != 'Всего:'
...
RowNo = RowNo + 1
ENDDO
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741682
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вроде понятно:
lnEmpty счетчик пустых строк
lnRow номер обрабатываемой строки
далее в цикле читаем в переменную lcVal ячейку экселя с координатами (7,lnRow)
если в lcVal пусто - увеличиваем счетчик пустых, уходим в начало цикла.

Добавь в начало
Код: sql
1.
2.
xl = CREATEOBJECT ('Excel.Application')
xl.Workbooks.Add("C:\Book.xlsx")


и запусти. Ну и 7 на 2 замени. Тебе же 2й столбец надо.

PS Возможно напутал (7,lnRow) и надо (lnRow,7). Не помню где строка, где столбец.
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741696
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок20142014, если уж ты так настроился, чтоб тебя кормили с ложечки, не забудь по завершении работы с Эксел-таблицей написать
xl.Quit()
xl =0.
Иначе экземпляр Эксела будет маячить в Диспетчере задач, пока не закроешь приложение Фокса.
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741707
Блин такой подход неправильный получается, потому что некоторые строки могут не содержать значений, а потом иметь значения. Например в каком-то столбце идут 10 значений подряд, затем 20 пустых строк, а затем опять значения. и не факт что 20 пустых.

Можно как-то полностью скопировать таблицу xlsx в курсор? Чтобы потом в курсоре дальше? Причем скопировать не сначала, а с 8-ой строки? Я раньше не имел дело с exel поэтому сложно. только экспортировал из курсора в excel и все.
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741722
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок20142014Я раньше не имел дело с exel поэтому сложно. только экспортировал из курсора в excel и все.
Считай что читаешь двухмерный массив бесконечного размера, у которого в начале что-то записано.

По хорошему разбор делается в два шага:
1. Найти шапку таблицы и по названиям столбцов определить какую колонку в какое поле курсора писать. Если заголовка не нашел - файл неправильного формата.
2. Начиная со следующей строки: читаешь нужные ячейки строки, добавляешь запись в курсор и пишешь прочитанное в соответствующие поля курсора.

Ну и не забывай проверять тип прочитанных данных.
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741724
Rostislav D. Kudryashov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок20142014, исправляю описку в своём 13:16
В заголовке цикла, конечно, как и везде, надо обращаться к свойству Value экселовской ячейки.
А если некоторые ячейки "совсем" не заполнены, то прежде использования их значения, надо проверить, что там не NULL:
Код: plaintext
1.
2.
3.
4.
5.
6.
DO WHILE VARTYPE (xl.Cells[RowNo,1].Value) != 'C' OR xl.Cells[RowNo,1].Value != 'Всего:'
  IF NOT ISNULL (xl.Cells[RowNo,1].Value) 
    ...
  ENDIF
  RowNo = RowNo + 1
ENDDO
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741751
А это команда может импортировать xlsx в dbf? как есть? у меня он ошибку выдает

IMPORT FROM FileName
[TYPE] FW2 | MOD | PDOX | RPD
| WK1 | WK3 | WKS | WR1 | WRK | XLS
| XL5 [SHEET cSheetName]
[AS nCodePage]


IMPORT FROM "C:\1.xlsx" TYPE XL8 SHEET "Результат" или не так пишу?
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741757
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок20142014А это команда может импортировать xlsx в dbf? как есть?
Нет
ХэлпXL8
Include XL8 to import data from Microsoft Excel 97 . Columns from the worksheet become fields in the table; the worksheet rows become records in the table. Worksheet files created in Microsoft Excel have an .xls extension .
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741763
Dima T, А вы не могли бы привести пример на примере такой таблицы (я ее специально уменьшил и желтым выделил основные столбцы. В исходном они не выделены, на цвет не нужно внимание обращать) (в таблице есть просто объединенные ячейки тоже), поэтому хочу просто скопировать xlsx в курсор и потом оттуда нужное брать:

Вот как эту таблицу импортировать в курсор, с учетом того что 5-я строка это заголовки курсора будут, а с 8-ой включительно это значения?
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741771
нашел такой код на форуме, но он выдает в ячейках NULL или memo, а некоторые поля отображаются.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
lcFile = GETFILE()  
  IF EMPTY(lcFile) THEN  
    RETURN  
  ENDIF  
  store SQLSTRINGCONNECT(;      
    "DRIVER={Microsoft Excel Driver (*.xls)};" + ;      
    "FIL=Excel 2007;" + ;      
    "DefaultDir=С:\;" + ;      
    "DBQ="+lcFile);      
    TO gn      
    ?SQLexec(gn, 'select * from "Результат$"')  
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741935
Нашел такой код, который импортирует данные xlsx в курсор, но поля, где есть значения отображаются как memo, а поля где нет значений как NULL. Как сделать отображение значений? Когда навожу на значение memo высвечивается значение которое зашифровано в memo.

Вот код.

Код: sql
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.
LOCAL lcXLBook AS STRING, lnSQLHand AS INTEGER, ;  
      lcSQLCmd AS STRING, lnSuccess AS INTEGER, ;  
      lcConnstr AS STRING  
  CLEAR  
    
  lcXLBook = [C:\4.xlsx]  
    
  lcConnstr = [Driver=] + ;  
      [{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] + ;  
      [DBQ=] + lcXLBook  
    
  IF !FILE( lcXLBook )  
      ? [Excel file not found]  
      RETURN .F.  
  ENDIF  
 
  lnSQLHand = SQLSTRINGCONNECT( lcConnstr )  

  lcSQLCmd = [Select * FROM "&#208;&#229;&#231;&#243;&#235;&#252;&#242;&#224;&#242;$"]  
  lnSuccess = SQLEXEC( lnSQLHand, lcSQLCmd, [xlResults] )  
  ? [SQL Cmd Success:], IIF( lnSuccess > 0, 'Good!', 'Failed' )  
  IF lnSuccess < 0  
      LOCAL ARRAY laErr[1]  
      AERROR( laErr )  
      ? laErr(3)  
      SQLDISCONNECT( lnSQLHand )  
      RETURN .F.  
  ENDIF  

  SQLDISCONNECT( lnSQLHand )
  
  SELECT * FROM xlResults INTO CURSOR curs1
  SELECT curs1
  brow
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38741937
Код: sql
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.
LOCAL lcXLBook AS STRING, lnSQLHand AS INTEGER, ;  
      lcSQLCmd AS STRING, lnSuccess AS INTEGER, ;  
      lcConnstr AS STRING  
  CLEAR  
    
  lcXLBook = [C:\4.xlsx]  
    
  lcConnstr = [Driver=] + ;  
      [{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] + ;  
      [DBQ=] + lcXLBook  
    
  IF !FILE( lcXLBook )  
      ? [Excel file not found]  
      RETURN .F.  
  ENDIF  
 
  lnSQLHand = SQLSTRINGCONNECT( lcConnstr )  

  lcSQLCmd = [Select * FROM "Результат$"]  
  lnSuccess = SQLEXEC( lnSQLHand, lcSQLCmd, [xlResults] )  
  ? [SQL Cmd Success:], IIF( lnSuccess > 0, 'Good!', 'Failed' )  
  IF lnSuccess < 0  
      LOCAL ARRAY laErr[1]  
      AERROR( laErr )  
      ? laErr(3)  
      SQLDISCONNECT( lnSQLHand )  
      RETURN .F.  
  ENDIF  

  SQLDISCONNECT( lnSQLHand )
  
  SELECT * FROM xlResults INTO CURSOR curs1
  SELECT curs1
  brow
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38742972
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новичок20142014,

зачем тебе фокс если ты на нем писать не умеешь? Может сначала книжку какую по фоксу почитать?
...
Рейтинг: 0 / 0
Выбрать определенный столбец xlsx файла
    #38743115
Березовский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБлин такой подход неправильный получается, потому что некоторые строки могут не содержать значений, а потом иметь значения

Попробуй "конец" таблицы ловить так

Код: c#
1.
xl.cells(1,1).SpecialCells(11).Row 
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выбрать определенный столбец xlsx файла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]