|
Как быстро читать не значения, а текст ячейки excel? | ☑ | ||
---|---|---|---|---|
0
Hipocrisy2013
04.10.19
✎
09:06
|
Вот через этот способ мы получаем значение ячеек, а есть ли быстрый способ чтения текста ячеек? Перебирать через цикл "Sheet.Cells(Счетчик1, Счетчик2).Text" очень долго.
Попытка EXCELApplication = Новый COMОбъект("EXCEL.Application"); EXCELApplication.Visible = Ложь; EXCELApplication.DisplayAlerts = Ложь; Исключение Попытка EXCELApplication.Application.Quit(); Исключение КонецПопытки; EXCELApplication = Неопределено; Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание); Возврат; КонецПопытки; Если НЕ ЗначениеЗаполнено(Объект.ПутьКФайлу) Тогда Сообщить("Не выбран файл!"); Возврат; КонецЕсли; Book = EXCELApplication.WorkBooks.Open(Объект.ПутьКФайлу); Sheet = Book.WorkSheets(1); ВсегоСтрок = Sheet.Cells(1,1).SpecialCells(11).Row; Область = Sheet.Range(Sheet.Cells(НачатьСоСтроки, НачатьСКолонки), Sheet.Cells(ВсегоСтрок, ЗакончитьДоКолонки)); Данные = Область.Value.Выгрузить(); Попытка EXCELApplication.Application.Quit(); Исключение КонецПопытки; EXCELApplication = Неопределено; |
|||
1
lEvGl
гуру
04.10.19
✎
09:14
|
adodb
|
|||
2
Hipocrisy2013
04.10.19
✎
09:57
|
(1) Ну и как через adodb вытаскивать текст ячеек? Способы описанные в инете, также вытаскивают значение
|
|||
3
lEvGl
гуру
04.10.19
✎
10:11
|
аа, текст
тогда шаманить под конкретные условия |
|||
4
Hipocrisy2013
04.10.19
✎
10:16
|
Connection = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"""; Попытка Connection.Open(СтрокаПодключения); Исключение Сообщить(ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; Command = Новый COMОбъект("ADODB.Command"); axCatalog = Новый COMОбъект("ADOX.Catalog"); axCatalog.ActiveConnection = Connection; Для Каждого Лист Из axCatalog.Tables Цикл ИмяТаблицы = Лист.Name; Прервать; КонецЦикла; RecordSet = Новый COMОбъект("ADODB.RecordSet"); Command.ActiveConnection = Connection; Command.CommandText = "SELECT COUNT(*) FROM ["+ИмяТаблицы+"]"; Command.CommandType = 1; RecordSet = Command.Execute(); КоличествоСтрок = RecordSet.Fields(0).Value; Command.CommandText = "SELECT * FROM ["+ИмяТаблицы+"]"; Command.CommandType = 1; Попытка RecordSet = Command.Execute(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; RecordSet.MoveNext(); ФайлВФормеМассива = Новый Массив; Пока RecordSet.EOF() = 0 Цикл МассивСтроки = Новый Массив; Для НомерПоля = 1 По RecordSet.Fields.Count Цикл МассивСтроки.Добавить(RecordSet.Fields(НомерПоля - 1).Value); КонецЦикла; ФайлВФормеМассива.Добавить(МассивСтроки); RecordSet.MoveNext(); КонецЦикла; RecordSet.Close(); Connection.Close(); что тут нужно поменять чтобы текст ячейки был я не значение RecordSet.Fields(НомерПоля - 1).text - такого свойства нету. |
|||
5
xenos
04.10.19
✎
10:18
|
Сохранить в CSV и читать чистый текст.
|
|||
6
Cyberhawk
04.10.19
✎
10:24
|
В общем случае это невозможно, т.к. отображаемый в ячейках текст может формироваться динамически при открытии (отображении) содержимого файла на экране. Например, даты и числа в разных форматах в зависимости от контекста (региональных настроек) ОС.
|
|||
7
Hipocrisy2013
04.10.19
✎
10:26
|
(5) Да быстрее через цикл "Sheet.Cells(Счетчик1, Счетчик2).Text" перебрать чем, сохранять файл, потом его же открывать читать и т.д., тем более мне нужно считывать текст только с одной колонке, а с других как раз значение нужно.
|
|||
8
Cyberhawk
04.10.19
✎
10:29
|
Что там за текст хочешь считывать, что считывание значений не устраивает?
А вообще пользуйся Гугл Шитс АПИ, там можно и то, и другое по желанию получать. |
|||
9
3achem
04.10.19
✎
10:36
|
(0) Мне нравится такой вариант (8.3.13.1513)
ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Текст); Построитель = Новый ПостроительЗапроса; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, 6)); Построитель.Выполнить(); ТаблицаЗначений = Построитель.Результат.Выгрузить(); 20 тысяч строк читает за секунду |
|||
10
lEvGl
гуру
04.10.19
✎
12:02
|
(9) действительно текст считывает с форматированием и остальной хренью или значения?
|
|||
11
lEvGl
гуру
04.10.19
✎
12:05
|
кстати, наверно форматированное можно в xml перегнать, потом читать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |