Tag: delphi

检查Variant值“Nothing”

这是我去年遇到的东西,所以SO似乎是一个很好的地方来logging它:) 问:从Delphi中自动化Excel(/ Word / …)时,如何检查Excel函数是否返回variablesNothing (如在VBA中调用)?

执行长时间运行的导出任务时如何获得响应式UI(表单)?

美好的一天人们。 首先,我不是以英语为母语的人,我可能会遇到一些语法错误。 我需要一些已经完成了一些东西或者应用程序的人的build议,好的,那就是我使用了delphiforms的TProgressBar,另外一个名为“TExcelApplication”的组件和一个TDBGrid。 当我导出DBGrid的内容时,应用程序“冻结”,所以我基本上把这个ProgressBar放到用户看到进程完成了多less。 我已经意识到,当TDBGrid检索每个行并将其导出到新的Excel工作簿时,您无法移动实际的表单,因此您必须等到该过程完成后才移动该表单。 那么,是否有可能做一些事情(我想过关于线程,但我不确定是否可以帮助),所以用户可以移动窗口,如果他想要的话? 非常感谢你花时间阅读并给我一个build议。 我正在使用Delphi XE。 以下是我用来导出行的代码: with ZQDetalles do begin First; while not EOF do begin i := i + 1; workSheet.Cells.Item[i,2] := DBGridDetalles.Fields[0].AsString; workSheet.Cells.Item[i,3] := DBGridDetalles.Fields[1].AsString; workSheet.Cells.Item[i,4] := DBGridDetalles.Fields[2].AsString; workSheet.Cells.Item[i,5] := DBGridDetalles.Fields[3].AsString; workSheet.Cells.Item[i,6] := DBGridDetalles.Fields[4].AsString; workSheet.Cells.Item[i,7] := DBGridDetalles.Fields[5].AsString; workSheet.Cells.Item[i,8] := DBGridDetalles.Fields[6].AsString; workSheet.Cells.Item[i,9] := DBGridDetalles.Fields[7].AsString; Next; barraProgreso.StepIt; end; end; 如果您想查看“导出”button的整个代码,请随时查看此链接: http […]

快速加载Excel电子表格的方法

我使用此代码来加载只包含数字的Excel电子表格。 但是将整个文件加载到一个stringgrid需要很长的stringgrid ,任何人都知道一个更快的方法来做到这一点? procedure sh1(SheetIndex:integer); Var Xlapp1, Sheet:Variant ; MaxRow, MaxCol,X, Y:integer ; str:string; begin Str:=trim(form2.OpenDialog1.FileName); XLApp1 := createoleobject('excel.application'); XLApp1.Workbooks.open(Str) ; Sheet := XLApp1.WorkSheets[SheetIndex] ; MaxRow := Sheet.Usedrange.EntireRow.count ; MaxCol := sheet.Usedrange.EntireColumn.count; form2.stringgrid1.RowCount:=maxRow+1; form2.StringGrid1.ColCount:=maxCol+1; for x:=1 to maxCol do for y:=1 to maxRow do form2.stringgrid1.Cells[x,y]:=sheet.cells.item[y,x].value; XLApp1.Workbooks.close; end; procedure TForm2.Button1Click(Sender: TObject); begin if opendialog1.Execute then begin […]

ADO SQLtypes强制转换为string(Excel)

如何使用ADO中的CAST将Float值转换为String? 我试过了 SELECT CAST([Field] AS VARCHAR(20)) FROM … 和 SELECT CAST([Field] AS STRING) FROM … 总是得到一个OLEexception(未知的错误)。 表格列包含混合数字(右alignment)和字母数字(左alignment)值。 如果只有字母数字值,ADO查询字段types是string。 我正在使用Delphi 2009 ADO和Excel 2010。

运行delphi客户端自动化程序后为什么excel.exe仍然被加载的原因?

我编写了一个Delphi程序,将一个.XLS文件的几个不同电子表格中的数据提取并合并到一个文本文件中供以后处理。 这是一个Delphi 7 控制台程序。 最相关的代码片段的摘录会告诉你,显然,我的程序是相当不错的performance,或至less它需要。 uses … ActiveX, ComObj … ; procedure Fatal(s:string); … Halt(1); var ExcelApp:Variant; (* global var *) begin (* main program block *) coInitialize(nil); ExcelApp:=CreateOleObject('Excel.Application'); try ExcelApp.Visible:=False; ExcelApp.WorkBooks.Open(ExcelFileName); … XLSSheet := ExcelApp.Worksheets[ExcelSheetName]; … try XLSRange := XLSSheet.Range[ExcelRangeName]; except Fatal('Range "'+ExcelRangeName+'" not found'); end; if VarIsNull(XLSRange) then Fatal('Range '+ExcelRangeName+' not found'); for […]

如何得到delphi货币types像Excel所有的时间?

我试图让Excel像Excel一样圆,但我不能。 这里是代码: procedure TForm1.Button1Click(Sender: TObject); var s : string; c : currency; begin c := 54321.245; s := ''; s := s + Format('Variable: %m',[c]); s := s + chr(13); s := s + Format(' Literal: %m',[54321.245]); ShowMessage(s); end; 我正在使用一个设置为54321.245的货币variables,当我使用银行家舍入对这个variables进行格式化时。 但是,当我格式化相同的值作为一个文字,它围绕Excel的方式。 无论是格式化一个货币variables还是一个字面值,我都希望这个数字能达到54,321.25美元 。 如何确保Delphi每次都像Excel一样进行轮换? 编辑 The rounding I expect to see is as follows: 54,321.245 […]

Excel插件与无缝撤消:可能吗?

我正在考虑实现一个使用COM( 而不是 VBA)的Excel加载项,它将处理工作表中的数据。 我将需要这个加载项与Undo堆栈无缝集成。 进一步来说: 这个加载项对数据的任何修改都需要用户撤销(通过标准的撤消操作) 需要保留插件操作发生之前撤消堆栈中的项目 到目前为止,我的(尽pipe敷衍)研究,Excel是否可以允许这一点还不清楚。 如果没有,这是一个showstopper,加载项将没有价值。 我的问题:这可能吗? 这更像是一个“是或否”的问题,而不是一个“如何”的问题,因为我需要知道我是否正在进行大雁追逐。 然而,任何关于如何做的指针都是一个好处。

从excel导出为ex​​cel

我正在寻找从delphi出口数据,而不必拥有一个Excel的副本,这可能吗? NB CSV不会。

什么是检查Excel OLE是否可用的正确方法?

我需要testing我的程序是否可以使用Excel OLE,因为它可以在没有Excel的PC上启动。 在网上的代码示例假设安装了Excel,但如果不是? XLApp := CreateOleObject('Excel.Application'); try // Hide Excel XLApp.Visible := False; // Open the Workbook XLApp.Workbooks.Open(aPath); …snip… finally // Quit Excel if not VarIsEmpty(XLApp) then begin XLApp.Quit; XLAPP := Unassigned; end; end; 这是否是正确的代码来查找是否安装了Excel? //Try to create Excel OLE try XLApp := CreateOleObject('Excel.Application'); except ShowMessage('Error opening Excel'); Exit; end;

用于将Delphi TDataSet导出到未安装Excel的本机XLS的开源组件或单元

你可能知道有一个免费的开源Delphi代码的存在,可以将TDataSet导出为原生XLS格式吗? 这个问题以前在这里问过 ,但我正在寻找一个免费的解决scheme。 正如在例如TeeChart.TeeStore.TSeriesDataXLS.SaveToStream中所观察到的那样,编写本地XLS导出函数不是一个火箭科学,但我很难find一个现有的解决scheme,这肯定会节省一些时间和金钱(对于将用于商业组件10-20%)。 如果这样的出口代码将允许颜色和文本样式改变,这将是有益的,但是对于我个人而言,这并不重要。