Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Справочник товаров
 
 автор: час   (21.12.2009 в 13:09)   личное сообщение
 
 

Выгружаю его в OpenOffice
Потом загружаю его обратно
Группа товаров - выглядит как объединение нескольких ячеек в строке
а товары там несколько отдельных ячеек в строке
наименование, цена, количество
=================================
Как же при загрузке отличить строку группы от строки товар????

Поле идентификатор не хочу вносить - из за шаловливых рук пользователей

  Ответить  
 
 автор: snipe   (21.12.2009 в 13:17)   личное сообщение
 
 

у вас ячейка в группе пустая
ну - у товара есть цена и даже если она не прописана то она (цена) равна 0,00
а у группы эта ячейка пустая
вот и ловите ее
(во второй строке - где дата точки кажется лишние)

Добавлено
или же ориентируйтесь по цвету ячейки (у Вас группы покрашены в голубенький цвет)

  Ответить  
 
 автор: час   (21.12.2009 в 13:26)   личное сообщение
53 Кб.
 
 

Спасибо за совет!!!

группы могут перекрасить
при вводевручную новой строки
цену фолочи могут не поставить..
хотя можно строго настрого приказать....нооо

  Ответить  
 
 автор: snipe   (21.12.2009 в 13:30)   личное сообщение
 
 

это они могут
пусть красят группы в любой цвет кроме белого
сравнивать с номером белого если белый то не группа

Добавлено
при загрузке двигаться по столбцу названий и спрашивать имена ячеек если просто ячейка то товар а если диапазон то группа
я имел в виду как у Экселя Cells(1,1).Address

  Ответить  
 
 автор: час   (21.12.2009 в 13:38)   личное сообщение
 
 

даа, спасибки....
я так и хотел, но не знаю как в Опене отличить диапазон от недиапазон вот в чем вопросон.....

  Ответить  
 
 автор: час   (21.12.2009 в 13:50)   личное сообщение
 
 

пока нашёл вот что Свойство Merge объектов Cell и CellRange, оно read-write.

теперь - как этим воспользоваться

При выполнении Delphi выдает ошибку о несовпадении типов

If OC.Sheets[0].Cell[i,j].Merge Then
Begin

  Ответить  
 
 автор: snipe   (21.12.2009 в 15:10)   личное сообщение
 
 

merge - это объединить- команда к исполнению
а вам нужно получить свойство
по этому if в данном случае не пролезет
(опен офиса я не знаю - по этому могу только предполагать )
вот если бы можно было получить имя (адрес) выделенного диапазона (ячейки) все бы упростилось

  Ответить  
 
 автор: час   (21.12.2009 в 16:44)   личное сообщение
 
 

Да, но
Merge объектов Cell и CellRange, оно

 read-write.

  Ответить  
 
 автор: snipe   (21.12.2009 в 16:55)   личное сообщение
 
 

Час - уважаемый
не зацикливаетесь на одной функции merge
есть другие свойства

  Ответить  
 
 автор: час   (21.12.2009 в 17:13)   личное сообщение
 
 

Спасибки!!!!
БУМ искать........
чё та кроме нас никто не присоединился
С опенофисом - мало хто дружит - однако........

  Ответить  
 
 автор: час   (21.12.2009 в 20:27)   личное сообщение
 
 

в опене всё наподобеее тока вот так
Dim nEndCol As Integer
Dim oCursor As Object
Dim aAddress As Variant



Set OOO_Range = OOO_Sheet.getCellRangeByName("A1:A1")
Set oCursor = OOO_Sheet.createCursorByRange(OOO_Range)
oCursor.GotoEndOfUsedArea (True)
Set aAddress = oCursor.RangeAddress
почемутта всегда 8 показывет
nEndCol = aAddress.EndColumn

  Ответить  
 
 автор: час   (21.12.2009 в 20:31)   личное сообщение
 
 



Теперь не знаю как данные из ячейки считать

Set OOO_Range = OOO_Sheet.getCellByPosition(0, 0)
MsgBox OOO_Range.Value

всё время 0 выдаёт

вернее числовое читает , а строковое = 0 выдаёт

дуррррдом

  Ответить  
 
 автор: snipe   (22.12.2009 в 00:01)   личное сообщение
 
 

Чета мне кажется что вот так должно быть

Set OOO_Range = OOO_Sheet.getCellByPosition(0, 0)
Set aAddress = OOO_Range.RangeAddress

Это к сообщению в 20:27

  Ответить  
 
 автор: час   (22.12.2009 в 09:25)   личное сообщение
 
 

Даа так и есть

Dim aAddress As Variant
Set OOO_Range = OOO_Sheet.getCellByPosition(0, 4)
Set aAddress = OOO_Range.RangeAddress
MsgBox aAddress.EndColumn



ответ 4

  Ответить  
 
 автор: snipe   (22.12.2009 в 09:42)   личное сообщение
 
 

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

  Ответить  
 
 автор: час   (22.12.2009 в 10:09)   личное сообщение
 
 

Как Вы ето себе представляете в плане кода????

  Ответить  
 
 автор: snipe   (22.12.2009 в 11:00)   личное сообщение
25 Кб.
 
 

Ну если на екселе то вот так

  Ответить  
 
 автор: час   (22.12.2009 в 12:37)   личное сообщение
 
 


Sub Макрос1()
' Макрос1 Макрос
' Макрос записан 22.12.2009 (Snipe)
    Dim asd As String
    For i = 1 To 40
    Cells(i, 1).Select
    asd = Selection.Address
    If InStr(1, asd, ":") > 0 Then
        If Mid(asd, InStr(1, asd, ":") + 2, 1) = "G" Then
        Cells(i, 8) = "Группа"
        Else
        Cells(i, 8) = "Какой-то мудак объединил ячейки"
        End If
    End If
    Next i
    Cells(1, 1).Select
End Sub





только двоеточий на листе я не нашёл

  Ответить  
 
 автор: snipe   (22.12.2009 в 12:40)   личное сообщение
 
 

час - там изначально было другое слово

  Ответить  
 
 автор: snipe   (22.12.2009 в 14:10)   личное сообщение
 
 

address возвращает имя ячейки или имя диапазона ячеек
хитрость в том что при обращении через Cells т.е якобы обращаемся к одной ячейке
однако если ячейки объединены то при выделении (select) выделяется не одна ячейка к которой обращаемся а диапазон объединенных ячеек
(для примера имеем диапазон Range("A1:g1") если обратиться Cells(1.1).address то получим "A1" а если сначала Cells(1,1).Select а а потом Selection.Address то получим $A$1:$G$1
вот это : я и ловил)
однако все это справедливо для Excel

  Ответить  
 
 автор: час   (22.12.2009 в 14:18)   личное сообщение
 
 

Спасибо!!!!
Бум посмотреть........

  Ответить  
 
 автор: час   (22.12.2009 в 14:16)   личное сообщение
 
 


там изначально



Скопировал - как есть

  Ответить  
 
 автор: час   (22.12.2009 в 14:52)   личное сообщение
 
 

ООООООООООООООООООО КАК ПЛОХО БЫТЬ БЕСТОЛКОВЫМ

MsgBox OOO_Range.GetString

точнее

If TypeName(OOO_Range.Value) = 0 Then
MsgBox OOO_Range.GetString
Else
MsgBox OOO_Range.Value
End If

============================
Дурдом.......

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList