Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2015, 15:09   #1
Alice Vin
 
Регистрация: 22.04.2015
Сообщений: 9
По умолчанию поиск пунктира в excel

Добрый день, ребята, подскажите пожалуйста... имеется код анализ документа, для поиска линий в документе:
Код:
Код Delphi
unit Unit1;
 const
  // 
  xlDiagonalDown = 5;
  // Диагональная от верхнего левого угла в нижний правый каждой ячейки в диапазоне
  xlDiagonalUp = 6;
  // Диагональная из нижнего левого угла в правый верхний каждой ячейки в диапазоне.
  xlEdgeLeft = 7; // Левая для всего диапазона ячеек.
  xlEdgeTop = 8; // Верхняя для всего диапазона ячеек.
  xlEdgeBottom = 9; // Нижнаяя для всего диапазона ячеек
  xlEdgeRight = 10; // Правая для всего диапазона ячеек.
   xlInsideVertical = 11;
  // Вертикальные границы всех внутренних ячеек диапазона
  xlInsideHorizontal = 12;
  // Горизонтальные границы всех внутренних ячеек диапазона
   // 
  xlContinuous = 1; // Непрерывная линия
  xlDashDot = 4; // Пунктир с точкой
  xlDashDotDot = 5; // Пунктир с двумя идущими подряд точками
  xlSlantDashDot = 13; // Наклонная пунктирная
  xlDash = -4115; // Пунктирная линия
  xlDot = -4118; // Линия из точек
  xlDouble = -4119; // Двойная линия
  xlLineStyleNone = -4142; // Без линий
   // 
  xlHairline = 1; // Самая тонкая граница
  xlThin = 2; // Тонкая граница
  xlThick = 4; // Толстая граница
  xlMedium = -4138; // Средняя толщина
 
var
  Form1: TForm1;
  pt: string;
 
implementation
 
uses Unit2;
 
{$R *.dfm}
 
procedure TForm1.Button4Click(Sender: TObject);
begin
  if not od.Execute then
    exit;
  Edit1.Text := od.FileName;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  pt := ExtractFilePath(ParamStr(0));
  Edit1.Text := '';
  Edit2.Text := '1';
  Edit3.Text := '10';
  Edit4.Text := '1';
  Edit5.Text := '10';
  sg1.cells[0, 0] := 'Row';
  sg1.ColWidths[0] := 50;
  sg1.cells[1, 0] := 'Col';
  sg1.ColWidths[1] := 50;
  sg1.cells[2, 0] := 'Текст';
  sg1.ColWidths[2] := 150;
  sg1.cells[3, 0] := 'Верхняя';
  sg1.ColWidths[3] := 50;
  sg1.cells[4, 0] := 'Правая';
  sg1.ColWidths[4] := 50;
  sg1.cells[5, 0] := 'Нижняя';
  sg1.ColWidths[5] := 50;
  sg1.cells[6, 0] := 'Левая';
  sg1.ColWidths[6] := 50;
  groupBox3.Enabled:=false;
end;
 
function TForm1.Getcel(v: variant): TCel;
begin
  Result.cText := v.value;
  Result.gLeft := 0;
  Result.gRight := 0;
  Result.gTop := 0;
  Result.gBotom := 0;
  if v.Borders.LineStyle <> xlLineStyleNone then
  begin
    if v.Borders[xlEdgeLeft].LineStyle > 0 then
      Result.gLeft := 1
      or
     result .gleft :=2
    else
      Result.gLeft := 0;
 
    if v.Borders[xlEdgeRight].LineStyle > 0 then
      Result.gRight := 1
    else
      Result.gRight := 0;
 
    if v.Borders[xlEdgeTop].LineStyle > 0 then
      Result.gTop := 1
    else
      Result.gTop := 0;
 
    if v.Borders[xlEdgeBottom].LineStyle > 0 then
      Result.gBotom := 1
    else
      Result.gBotom := 0;
    // толщина
    if (v.Borders[xlEdgeLeft].Weight = xlHairline) or
      (v.Borders[xlEdgeLeft].Weight = xlThin) then
      Result.gLeft := Result.gLeft * 1
    else
      Result.gLeft := Result.gLeft * 2;
    if (v.Borders[xlEdgeRight].Weight = xlHairline) or
      (v.Borders[xlEdgeRight].Weight = xlThin) then
      Result.gRight := Result.gRight * 1
    else
      Result.gRight := Result.gRight * 2;
    if (v.Borders[xlEdgeTop].Weight = xlHairline) or
      (v.Borders[xlEdgeTop].Weight = xlThin) then
      Result.gTop := Result.gTop * 1
    else
      Result.gTop := Result.gTop * 2;
    if (v.Borders[xlEdgeBottom].Weight = xlHairline) or
      (v.Borders[xlEdgeBottom].Weight = xlThin) then
      Result.gBotom := Result.gBotom * 1
    else
      Result.gBotom := Result.gBotom * 2;
 
    if (trim(Result.cText) = '') and (Result.gLeft = 0) and (Result.gRight = 0)
      and (Result.gBotom = 0) and (Result.gTop = 0) then
      Result.clr := false
    else
      Result.clr := True;
 
  end;
 
end;
 
end.
не могу понять, как отыскать в нем пунктирную линию, тк. в документе есть пунктир, а в итоге мне выдает только тонкую и жирную линии... помогите пожалуйста..
Alice Vin вне форума Ответить с цитированием
Старый 14.06.2015, 16:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Напиши так:
Код:
function TForm1.Getcel(v: variant;LineKind:Integer): TCel;
begin
  Result.cText := v.value;
  Result.gLeft := 0;
  Result.gRight := 0;
  Result.gTop := 0;
  Result.gBotom := 0;
  if not (v.Borders.LineStyle in [xlLineStyleNone,LineKind])  then
...
Тут продолжение
И в эту функцию передавай вторым параметром соответствующую константу, которая у тебя описана.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.06.2015, 16:24   #3
Alice Vin
 
Регистрация: 22.04.2015
Сообщений: 9
По умолчанию

а вот что именно вставлять? вот это до меня не доперло...
Alice Vin вне форума Ответить с цитированием
Старый 14.06.2015, 16:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У тебя есть константа: xlDash = -4115; // Пунктирная линия
Вот xlDash и вставляй.

Если я конечно правильно понял задачу, и твой пример верен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.06.2015, 16:51   #5
Alice Vin
 
Регистрация: 22.04.2015
Сообщений: 9
По умолчанию

мой пример анализирует и находит два типа линий, тонкую и жирную...
как мне добавить это в цикл....вот это третье свойство...

Последний раз редактировалось Alice Vin; 14.06.2015 в 17:02.
Alice Vin вне форума Ответить с цитированием
Старый 14.06.2015, 17:09   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и хорошо )
Передавай в процедуру тип искомой линии, как я выше предложил и будет тебе универсальная процедура:
Код:
 
function TForm1.Getcel(v: variant;LineKind,LineWidth:Integer): TCel;
begin
  Result.cText := v.value;

  if v.Borders.LineStyle <> LineKind then exit;

  Result.gLeft:=byte(v.Borders[xlEdgeLeft].LineStyle > 0)
                   *(byte(v.Borders[xlEdgeLeft].Weight = LineWidth)+1);

  Result.gRight :=byte(v.Borders[xlEdgeRight].LineStyle > 0);
                    *(byte(v.Borders[xlEdgeRight].Weight = LineWidth)+1);

  Result.gTop :=byte(v.Borders[xlEdgeTop].LineStyle > 0);
                    *(byte(v.Borders[xlEdgeTop].Weight = LineWidth)+1);

  Result.gBotom :=byte(v.Borders[xlEdgeBottom].LineStyle > 0);
                       *(byte(v.Borders[xlEdgeBottom].Weight = LineWidth)+1);
 
 Result.clr:=(trim(Result.cText) = '') and (Result.gLeft = 0) and (Result.gRight = 0)
      and (Result.gBotom = 0) and (Result.gTop = 0)
 
 end;
 
end;
Соответственно вызов: Getcel(<чет там>,xlDash,xlThin ) установит Result в нужные значения согласно стилю и толщине.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в excel MIKID Microsoft Office Excel 2 05.09.2013 20:36
Поиск в EXCEL ANTON255200 Общие вопросы Delphi 0 09.12.2012 18:26
Почему Excel 2010 выполняет поиск гораздо медленнее чем Excel 2003 Sprat Microsoft Office Excel 1 25.10.2011 05:34
поиск в Excel Sega22 Общие вопросы Delphi 1 31.05.2010 09:55
Поиск в Excel Tirendus Общие вопросы Delphi 3 21.01.2010 10:39