С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
335 / 276 / 111
Регистрация: 07.04.2011
Сообщений: 1,557
1

Обработка Try.Except при загрузке из эксель файла

04.04.2013, 00:40. Показов 2048. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Загружаю данные из файла эксель в стринггрид.Код:
Delphi
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
function ExcelToStringGrid(AGrid:TStringGrid;OpenExelDlg:TOpenDialog): Boolean;
 const 
    xlCellTypeLastCell = $0000000B; 
 var 
    x, y, k, r: Integer;
    Data,Range:integer;
    Error:Boolean;
    Handle:HWND;
 begin 
    Result := False; 
    // Создаем объект Excel-OLE
    XLApp := CreateOleObject('Excel.Application'); 
    try
      // Спрятать Excel
      XLApp.Visible := False; 
      // Открыть Рабочую книгу
      XLApp.Workbooks.Open(OpenExelDlg.FileName);
      // Лист
      ExSheet := XLApp.Workbooks[1].WorkSheets[1];
     ExSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
      // Получить значение последний строки
      x := XLApp.ActiveCell.Row;
       y:=3; //строка
      // Установить колонку и столбец Stringgrid'а.
      AGrid.RowCount := x;
      // Присвоение Variant ассоциативной WorkSheet'ому значению
     ExRange := XLApp.Range['A1', XLApp.Cells.Item[X, 3]].Value;
      // Установить цикл для заполнения TStringGrid
        for k:=1 to x do
        for r := 1 to 3 do
         begin
          Try
          Data:=StrToInt(EXRange[K,R]);
          except On EConvertError do
           begin
           //  MessageBox(0,'В исходных данных ошибка.Например:буква.Необходимо исправить исходные данные и попытаться загрузить их снова.Исправить ошибку?','Ошибка данных',MB_YESNO)=ID_YES;;
          ShowMessage('Ошибка');
          Exit;
          end;  //except
           end;//try
 
          AGrid.Cells[(r), (k)] := ExRange[K, R]; //переноси в грид данные из экселя
          AGrid.RowCount := k + 1;
        end;
          // Очистка матрицы Delphi Variant
      ExRange := Unassigned;
    finally
      // Выход Excel
      if not VarIsEmpty(XLApp) then 
      begin 
        XLApp.Quit;
        XLAPP := Unassigned;
        ExSheet := Unassigned;
        Result := True;
      end;
       end;
 end;
Файл экселя должен состоять только из целых значений.Без буквенных значений.
Приведенный выше код работает,но он загружает данные из экселя до тех пор,пока не наткнется на неккоректное значение.В грид выведутся значения,до буквы(в вложениях файл,на котором тестирую).
Пробовал проверять весь ExRange до загрузки в стринггрид.Если в нем есть ошибка,то не загружает,но в стринггрид добавляется пустые строки,и их количество равно количеству строк в ExRange.Хотя просто должен прервать выполнение обработки экселя.
ВОПРОС:Как правильно обработать диапазон ExRange до загрузки в стринггрид,чтобы при нахождении в нем ошибок загрузка дальше не происходила.И количество строк в гриде не увеличивалось.Желательно Try..Except.
P.S.Мелочь,но почему-то ругается на MessageBox.А именно на =ID_YES вконце.В чем ошибка?
Вложения
Тип файла: xlsx test.xlsx (8.9 Кб, 6 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.04.2013, 00:40
Ответы с готовыми решениями:

Выдает ошибку при загрузке данных из файла эксель на Python 3.7. Что в коде не так?
# Загрузка библиотек import numpy as np import pandas as pd import seaborn as sns import...

Обработка конца строки при загрузке из файла
День добрый. Помогите, пожалуйста. Исходные данные. Есть класс: class ThingPtr { string...

Обработка ошибки при загрузке для парсинга xml файла
помогите пожалуйста как сделать действие чтоб при ошибке загрузки файла по ссылке можно было это...

Обработка ошибки при загрузке для парсинга xml файла
вот код var client = new HttpClient(); var uri = new...

7
335 / 276 / 111
Регистрация: 07.04.2011
Сообщений: 1,557
04.04.2013, 11:11  [ТС] 2
Никто не знает?Сейчас такая функция осталась.
Кликните здесь для просмотра всего текста
Delphi
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
function ExcelToStringGrid(AGrid:TStringGrid;OpenExelDlg:TOpenDialog): Boolean;
 const 
    xlCellTypeLastCell = $0000000B; 
 var 
    x, y, k, r: Integer;
    Data,Range:integer;
    Error:Boolean;
    Handle:HWND;
 begin 
    Result := False; 
    // Создаем объект Excel-OLE
    XLApp := CreateOleObject('Excel.Application'); 
    try
      // Спрятать Excel
      XLApp.Visible := False; 
      // Открыть Рабочую книгу
      XLApp.Workbooks.Open(OpenExelDlg.FileName);
      // Лист
     ExSheet := XLApp.Workbooks[1].WorkSheets[1];
     ExSheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
      // Получить значение последний строки
      x := XLApp.ActiveCell.Row;
       y:=3; //строка
      // Установить колонку и столбец Stringgrid'а.
      AGrid.RowCount := x;
      // Присвоение Variant ассоциативной WorkSheet'ому значению
     ExRange := XLApp.Range['A1', XLApp.Cells.Item[X, 3]].Value;
      // Установить цикл для заполнения TStringGrid
        for k:=1 to x do
        for r := 1 to 3 do
         begin
          AGrid.Cells[(r), (k)] := ExRange[K, R]; //переносим в грид данные из экселя
          AGrid.RowCount := k + 1;
        end;
          // Очистка матрицы  Variant
      ExRange := Unassigned;
    finally
      // Выход Excel
      if not VarIsEmpty(XLApp) then 
      begin 
        XLApp.Quit;
        XLAPP := Unassigned;
        ExSheet := Unassigned;
        Result := True;
      end;
       end;
 end;

Пробовал при считывании данных из ячеек экселя определять тип данных через VarType(Значение)=VarInteger.Но все равно происходит загрузка,даже если в экселевском файле содержатся буквенные значения.
Может есть еще другие функции определения типа значения?
0
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
04.04.2013, 11:22 3
Создал себе функцию для вычисления формулы через Excel. Отправку, получение и проверку полученных данных из ячейки Excel я делаю так:

Delphi
1
2
3
4
5
6
7
8
9
var Formula_Val:variant
    Formula_Text: string;
begin
...
   MyCell:=Sheet.Cells[1,1];   // определяю ячейку для занесения формулы
   MyCell.Value:=Formula_Text; // Заносим формулу
   Formula_Val:=MyCell.Value;  // Вычисляем формулу
   if (VarIsFloat(Formula_Val)=false) or (VarIsNumeric(Formula_Val)=false) then ShowMessage('Ошибка в формуле')
   else ...
1
335 / 276 / 111
Регистрация: 07.04.2011
Сообщений: 1,557
04.04.2013, 13:35  [ТС] 4
Не работает...Загружает и буквы,и знаки и прочие некорректные данные.
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
04.04.2013, 13:53 5
Цитата Сообщение от OverDozero Посмотреть сообщение
P.S.Мелочь,но почему-то ругается на MessageBox.А именно на =ID_YES вконце.В чем ошибка?
Код
IDYES
http://docwiki.embarcadero.com... MessageBox
1
335 / 276 / 111
Регистрация: 07.04.2011
Сообщений: 1,557
04.04.2013, 14:01  [ТС] 6
Да уже разобрался))Спасибо
Просто запрос на закрытие выглядит так:
Delphi
1
2
3
4
5
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);//запрос на выход
begin
  CanClose:=MessageBox(Handle,'Выйти из программы?','Выйти?',MB_YESNO)=ID_YES;
 if CanClose=false then Form1.SetFocus;
 if CanClose=true then halt;
Скопировал этот код,а на него ругается
З.Ы.Проблема с проверкой данных из экселя решена.Проверка идет уже в самом стринггриде,после заполнения данных.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
04.04.2013, 14:09 7
Оставь в покое Excel, подключись к документу через ADO, сделай запрос и в цикле по записям/полям возвращенного запросом набора данных контролируй значения:

try
IntValue := ADOQuery.Fields[i].AsInteger;
except
//в ячейке заведомо не целочисленное значение
end;
0
969 / 644 / 97
Регистрация: 01.11.2012
Сообщений: 1,447
04.04.2013, 15:03 8
OverDozero, запрос на выход из программы можно сделать следующий образом:

Delphi
1
2
  if MessageDlg('Вы уверены, что хотите выйти из приложения?',
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then  Close;
0
04.04.2013, 15:03
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2013, 15:03
Помогаю со студенческими работами здесь

Почему при открытии файла эксель, появляется из фонового скрытого режима мой файл эксель
Добрый день уважаемые форумчане, столкнулся с такой проблеммой. Есть небольшая программка которая...

Есть ли у кого нибудь обработка по загрузке из эксель в приходный документ,где поиск происходил бы по штрих-коду?
УТ 10.3 1С 8.1

Обработка исключения при загрузке зависимой сборки
Доброе время суток! Подскажите или пошлите для решения данной задачи. В WinForm проект делаю...

Обработка XML строки при загрузке dbf в Delphi
Пишу программу на Deplhi. программа загружает в себя dbf таблицу с полями: number, type,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как программировать под HCL Notes и создавать свои продукты на ее основе
InfoMaster 11.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой мощную платформу для разработки корпоративных приложений, которая сочетает в себе функции электронной почты, календаря,. . .
Как работать с SVN (Subversion)
InfoMaster 11.01.2025
Введение Система контроля версий является неотъемлемой частью современного процесса разработки программного обеспечения. Она обеспечивает управление изменениями в коде, позволяет отслеживать. . .
Использование GraphQL в JavaScript
InfoMaster 11.01.2025
Введение в GraphQL и его преимущества В современной разработке веб-приложений эффективный обмен данными между клиентом и сервером играет ключевую роль. GraphQL представляет собой язык запросов и. . .
Администрирован­­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru