helpf.pro
Регистрация

Считывание с определенного символа

XMA
20.04.2011 13:55Прочитано: 2669
есть файл *.xls в колонке номенклатуры находятся данные типа : (12345) **************. Они отличаются от наших справочников тем что в наших отсутствуют цифры. Как зделать так чтобы чтение начиналось с буквы или через несколько символов?
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
20.04.2011 14:03Ответ № 1
(0) XMA, допустим так:
Код 1C v 8.х
 СтрокаСДанными = "12345qwerty";
ЧистаяСтрока = Прав(СтрокаСДанными, СтрДлина(СтрокаСДанными)-5);
// Теперь ЧистаяСтрока будет равна qwerty
E_Migachev
20.04.2011 14:05Ответ № 2
+ (1) а ), можно еще проще:
Код 1C v 8.х
  СтрокаСДанными = "12345qwerty";
ЧистаяСтрока = Сред(СтрокаСДанными, 6);
// Теперь ЧистаяСтрока будет равна qwerty
XMA
20.04.2011 15:08Ответ № 3
Спасибо, помогло. И еще один вопрос. в 1с 7.7 *.xls файл формируется как: "Книга Microsoft Excel 5.0/95 (*.xls)" а не "Книга Excel 97-2003 (*.xls)"
Код 1C v 8.х
  	Состояние("Чтение данных из файла...");
//ТекНомер = Неопределено;
ТекДата = ТекущаяДата();

Попытка
XLSОбъект = ПолучитьCOMОбъект(ЭлементыФормы.ИмяФайлаЗагрузки.Значение);
Лист = XLSОбъект.Sheets(1).Cells();
Исключение
Сообщить("Не удается загрузить файл " + ЭлементыФормы.ИмяФайлаЗагрузки.Значение + "!");
Сообщить(ОписаниеОшибки());

КонецПопытки;

СчВрем = 0;

_ВсегоЗаписей = Лист.Cells(1,1).SpecialCells(11).Row;


ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("НаименованиеНоменклатуры");
ТЗ.Колонки.Добавить("АртикулНоменклатуры");
ТЗ.Колонки.Добавить("Количество");

Для НомСтроки = 20 По _ВсегоЗаписей
Цикл
если СокрЛП(Лист.Cells(НомСтроки, 1).Value) = "" и СокрЛП(Лист.Cells(НомСтроки + 2, 1).Value) = ""
тогда прервать конецесли;
если СокрЛП(Лист.Cells(НомСтроки, 1).Value) = ""
тогда НомСтроки = НомСтроки + 5;
конецесли;
ТекСтрока = ТЗ.Добавить();
ТекСтрока.НаименованиеНоменклатуры = Сред(СокрЛП(Лист.Cells(НомСтроки, 2).Value), 8);
ТекСтрока.АртикулНоменклатуры = СокрЛП(Лист.Cells(НомСтроки, 5).Value);
ТекСтрока.Количество = СокрЛП(Лист.Cells(НомСтроки, 12).Value);
КонецЦикла;


как это можно будет исправить?
E_Migachev
20.04.2011 15:57Ответ № 4
(3) XMA, не совсем понял - исправить что?
Если Книга Microsoft Excel 5.0/95 (*.xls) на Книга Excel 97-2003 (*.xls) - только путем пересохранения через Excel
XMA
20.04.2011 16:05Ответ № 5
вот именно что нужно сделать чтобы читала без пересохранения
XMA
20.04.2011 16:07Ответ № 6
чтобы на автомате. Юзверь указал на файл и пошла загрузка.
XMA
20.04.2011 16:10Ответ № 7
Основная проблема что там нет листов, но так как я не знаю структуру файлов таких форматов поэтому и не могу ничего путного зделать
E_Migachev
20.04.2011 16:37Ответ № 8
(7) XMA, листы там есть - они скрыты!
7.7 умеет сохранять только в этот формат excel и в 8.х эти файлы читаюся без проблем, посути и читает то excel ), может проще использовать mxl?
XMA
20.04.2011 17:06Ответ № 9
а можете сказать в чем отличие, программный код 1с я привел выше, что нужно исправить чтобы он считывался правильно?
E_Migachev
20.04.2011 17:15Ответ № 10
(9) XMA, попробуй v8.x: Быстрая функция чтения данных с листа Excel:
и вот еще рабочий пример:
Код 1C v 8.х
  Процедура ЧтениеXLSФайла(Элемент)

Если ПустаяСтрока(ИмяФайла) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
Возврат;
КонецЕсли;

Попытка
// Загрузка Microsoft Excel
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;

Попытка
// Открытие файла Microsoft Excel
Состояние("Открытие файла Microsoft Excel...");
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
Исключение
Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;

Попытка
// Обработка файла Microsoft Excel
Состояние("Обработка файла Microsoft Excel...");
// Читаем данные первого листа книги
ExcelЛист = ExcelФайл.Sheets(1);

// Определить количество строк и колонок выбранного листа книги Excel
xlCellTypeLastCell = 11;
ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
Исключение
Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
КонецПопытки;

// Создание описателя типов для таблицы значений
КЧ = Новый КвалификаторыЧисла(15,2);
КС = Новый КвалификаторыСтроки(50);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
Массив.Очистить();
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);

// Очистить предыдущие значения
ТаблицаДокумента.Очистить();
ТаблицаДокумента.Колонки.Очистить();

// Создать колонки табличного документа
ТаблицаДокумента.Колонки.Добавить("Номер",ОписаниеТиповС,"Номер",5);
ТаблицаДокумента.Колонки.Добавить("Артикул",ОписаниеТиповС,"Артикул",11);
ТаблицаДокумента.Колонки.Добавить("Описание",ОписаниеТиповС,"Описание",25);
ТаблицаДокумента.Колонки.Добавить("Цена",ОписаниеТиповЧ,"Цена",6);

// Последовательное чтение строк с выбранного листа
Для Строка = 1 По ExcelПоследняяСтрока Цикл

// Обработка нажатия Ctrl + Break
ОбработкаПрерыванияПользователя();

// Добавить данные в табличную часть экранной формы
Стр=ТаблицаДокумента.Добавить();
Стр.Номер = Строка;
Попытка
Стр.Артикул = ExcelЛист.Cells(Строка, 1).Value;
Стр.Описание = ExcelЛист.Cells(Строка, 2).Value;
Стр.Цена = ExcelЛист.Cells(Строка, 3).Value;
Исключение
// Не редко происходит ошибка конвертации отдельной ячейки документа
Сообщить("Ошибка чтения строки файла Microsoft Excel." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
// Отобразить информацию о ходе выполнения обработки
Состояние("Обработка файла Microsoft Excel : "
+ "строка " + Строка + " из " + ExcelПоследняяСтрока);

КонецЦикла;

// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();

// Отобразить результаты загрузки в форме элемента
ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();

КонецПроцедуры // ЧтениеXLSФайла(Элемент)
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.