|
#1
|
||||
|
||||
Грамотно ли это??
У нас в лечебных учреждениях Краснодарского края программа Краснодарской фирмы КМИВЦ. У них вообщем много косяков в программах...
Но я был очень сильно удивлен как у них работают отчеты в офисовские приложение... Они берут строку в буфер обмена и вставляют ее в приложение. Интересно много таких разработчиков которые с офисом работают через буфер?? И насколько это грамотно использовать буфер обмена при экспорте отчетов?? Я, например, считаю, что это верх безграмотности разработчиков. А на их программах половина Краснодарского края работают. From VasYa with LoVe... |
#2
|
||||
|
||||
Работает, ну и ладно
Ничего идеального в мире нет, кроме вселенной-которая идеальна и гениальна. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Вставка через буфер позволяет достичь просто ОФИГЕННОЙ скорости передачи данных.
Попробуйте в Excel добавить, скажем, 150 000 записей... Легче повеситься. Вставка же через буфер длает это за пару секунд. Код:
procedure PasteToColumn(var Buf:string; x,count:integer; Var Sheet:variant); var IR2,IR1: ExcelRange; begin Clipboard.AsText:=Buf; IDispatch(IR1):=Sheet.Cells.Item[1, x]; IDispatch(IR2):=Sheet.Cells.Item[count, x]; OLEVariant(Sheet.Range[IR1, IR2]).PasteSpecial; Clipboard.Clear; Buf:=''; end; procedure TForm1.ExportToExcel(FileName:string); var XLApp,Sheet:Variant; index,x:Integer; str,Buf:string; begin try Buf:=''; XLApp:= CreateOleObject('Excel.Application'); //Создаем Excel Application XLApp.Visible:=true; //Показываем его XLApp.Workbooks.Add(-4167); //добавляем книгу XLApp.Workbooks[1].WorkSheets[1].Name:='Отчёт'; Sheet:=XLApp.Workbooks[1].WorkSheets['Отчёт']; AssignFile(input,filename); Reset(input); //открываем файл на чтение index:=1; x:=1; while not eof(input) do begin Readln(str); Buf:=Buf+str+#9#10; if index mod 65536=0 then begin //если дошли до конца столбца (Excel), то копируем то что в буфере в этот столбец PasteToColumn(Buf,x,65536,Sheet); x:=x+1; //далее будем добавлять в другой столбец index:=0; application.ProcessMessages; end; index:=index+1; end; PasteToColumn(Buf,x,index,Sheet); //если что то осталось, то вставляем оставшееся CloseFile(input); except CloseFile(input); showmessage('Ошибка при экспорте данных'); end; end; |