Tag: delphi

从Delphi中closuresExcel

有人会协助我肯定是我的一个基本的错误请。 我的目标是打开一个Excel电子表格(不可见),填充它,附加到电子邮件,发送和closures所有东西。 它接近完成,除了Excel在任务pipe理器中保持打开状态之后,stream程完成之后。 代码块是: procedure TFMain.SendEmail; var i, j, r: Integer; vBody, vSaveVer: string; vAttach: TIdAttachment; vMftQty: array [1 .. 2] of Integer; vQtyTot: array [1 .. 12] of Integer; vNetTot: array [1 .. 12] of Real; oXL, oWB, oSheet: Variant; begin IdMessage1.From.Address := 'sage@valid-email.co.uk'; IdMessage1.From.Domain := 'valid-email.co.uk'; IdMessage1.From.Text := 'Sage <sage@valid-email.co.uk>'; IdMessage1.Subject := 'Sage'; […]

打开和closures连接string后,出现“扩展属性”

在我的应用程序中,我可以导入Excel文件,但在思杰我得到一个错误: Unrecognized database format 我有一个默认的连接string: const CXlsxConnectionString = 'Provider=Microsoft.ACE.OLEDB.12.0; Data Source=%s; Mode=Read; Extended Properties="Excel 12.0;HDR=YES"'; 在%s我设置了.xls或.xlsx文件。 下一个代码: conExcel.Close; conExcel.ConnectionString:= GetXlsConnectionString(excelFile); // –> Connectionstring: Provider=Microsoft.ACE.OLEDB.12.0; Data Source=Myexcel.xlsx; Mode=Read; Extended Properties="Excel 12.0;HDR=YES" conExcel.Open; conExcel.Close; // –> Connectionstring: Provider=Microsoft.ACE.OLEDB.12.0; Data Source=Myexcel.xlsx; Mode=Read; 在conExcel (TADOConnection)的打开和closures之后,扩展属性消失了。 当我想加载工作表,如:(dstSheetData – > TADODataSet,与conExcel连接) sql := format('select * from [%s]', [sheet]); dstSheetData.Close; dstSheetData.CommandText := […]

VBA-Excel AddPicture()beahiour根据Excel Visible而不同

Delphi可以通过Ole自动化驱动Excel,也可以从Word / VBAmacros中看到这个问题。 我正在展示一个testingWordmacros(下面)来certificate这不是一个Delphi问题,但也添加了Delphi代码,因为这可能会更容易一些。 这是我们现在面临的一个大问题,我想知道是否有人看到/解决了这个问题,或者至less有一些build议,因为我花了很多时间尝试各种解决方法和search解决scheme。 我们需要正确地获取图像大小,因为我们有严格的规范,图像不能有任何长宽比的变化。 问题如下。 如果我们使用Chart.Shapes.AddPicture()方法将jpeg文件中的图像添加到Excel图表中,只要Excel可见,就可以很好地工作。 图像出现在我们放置的位置,当您检查图像属性时,水平和垂直缩放都是100%。 然而,我们想对大量文件执行这个过程,并且由于其他一些步骤的复杂性,让Excel可见并不是很好,因为有很多闪烁,resize等等(这看起来不是很专业)。 它也减缓了这个过程。 现在,如果我们使用隐藏的Excel执行完全相同的步骤(就像通常使用COM-Automation一样),图像将会出现,但会被巧妙地改变。 更改的数量可能因图表窗口的状态而异。 但通常我会看到107%的高度缩放和99%的宽度缩放。 Wordmacros-VBA Sub Test_Excel() ' ' Test_Excel Macro ' ' 'You will need to go to 'Tools/References' in the Word VBA editor and enable reference to ' Microsoft Excel Dim Oxl As New Excel.Application Dim owB As Excel.Workbook Dim Chrt As Excel.Chart […]

如何使用Delphi的readwrite密码创build一个.xls文件

我知道可以使用ADO创build.xls文件,使用Excel创buildOLE自动化,甚至使用多个商业库。 我现在要求的不仅仅是创build一个新的.xls文件并向其中添加数据,而且还要用密码来防止编辑。 我想这将是可能的使用OLE自动化,但这将需要在计算机上的Excel安装,也添加所有我想避免的OLE自动化的潜在麻烦。 其他解决scheme是否提供密码保护文件的选项? (是的,我知道这是远远不够的,但客户要求,以防万一:我使用delphi2007)

如何将数据从Excel粘贴到cxGrid中

我有一个使用DevExpress cxGrid(连接到数据库)的Delphi应用程序。 我需要能够将数据从Excel复制粘贴到网格中。 这可能吗? 如果是这样,如何做到这一点,我需要哪些额外的组件?

使用Excel2000单元中的ExcelApp.Caller

我正在写一个使用XLAutomationAddin实现自定义Excel函数的Excel插件。 在Excel2000单元中,可以使用ExcelApplication.Caller属性确定调用自定义函数的ExcelRange。 但是, Excel2000.pas typelib的定义说我需要使用 property ExcelApplication.Caller[Index: OleVariant; lcid: Integer]: OleVariant; 无论我尝试什么,我都无法得到这个工作,因为Excel不断拒绝任何我input的参数。 我知道我可以input0或LOCALE_USER_DEFAULT到lcid ,但是Excel对于Index参数需要什么?

通过ADO将TDataSet复制到XLS

我试图使用ADO连接将内容从TDBGrid复制到Excel文件以传输数据。 这适用于<= 255个字符但更长的string失败的值。 我能做些什么来复制超过255个字符的string? 将数据types更改为adLongVarWChar tbl.Columns.Append不起作用。 ADOQuery获取大小为255的varchar字段,不pipe我在创build表时使用的是什么。 procedure DBGridToExcelADO(DBGrid: TDBGrid; FileName: string; SheetName: string); var cat : _Catalog; tbl : _Table; col : _Column; i : integer; ADOConnection : TADOConnection; ADOConnectionExcel: TADOConnection; ADOQuery : TADOQuery; ScrollEvents : TScrollEvents; SavePlace : TBookmark; begin //exporting ADOConnectionExcel := TADOConnection.Create(nil); try ADOConnectionExcel.LoginPrompt := False; ADOConnectionExcel.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' […]

从Delphi更新Excel ADO的单元格查询

我有以下代码来打开我的Excel工作表,使用TADOConnection和TADOQuery: conExcel.ConnectionString := 'Provider=Microsoft.JET.OLEDB.4.0;Data Source="D:\temp\file.xls";Extended Properties="Excel 8.0;HDR=No"'; conExcel.Connected := true; 当我运行下面的代码: queryExcel1.SQL.Text := 'SELECT * FROM [Hoja1$]'; queryExcel1.Open; while not queryExcel1.eof do begin showmessage(queryExcel1.Fields.Fields[0].AsString); queryExcel1.Next; end; 我得到文件的每一行,所以它工作正常,但我想更新一个单元格。 我正在使用这个代码: queryExcel2.SQL.Text := 'UPDATE [Hoja1$] SET F1 = 555555'; queryExcel2.ExecSQL; 哪种方式更新工作表上的每个“A”单元格为555555,但我真正想要的是将A1单元格设置为555555.有关如何包含查询的WHERE部分的任何提示。 谢谢。

导入一个excel文件到delphi的datagrid

我在.NET上试过这个代码 – 导入excel文件到devxpress datagrid – 它工作正常,但我必须创build一个程序,现在在delphi上做同样的工作。 我不太了解delphi,所以我需要一些想法如何做到这一点。 public static DataTable ImportExcelXLS(string FileName, bool hasHeaders) { string HDR = hasHeaders ? "Yes" : "No"; string strConn; if (FileName.Substring(FileName.LastIndexOf('.')).ToLower() == ".xlsx") strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\""; else strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties=\"Excel 8.0;HDR=" + […]

delphi – 如何取消在Excel中剪切/复制模式

(Delphi XE6,Excel 2010/2013) 在为Excel编写插件时,我不得不从一张纸上复制数据并粘贴到另一张纸上。 复制和粘贴工作正常…但是,在过程结束时,我留下了“行军ant”,即select虚线,用于标识被复制的内容。 我已经尝试了几件事情….在看各种其他文章,它说,我可以做出另一个select,这将照顾这个问题。 假设我从表A中select/复制,粘贴到表B中。完成后,以编程方式更改回表单A,然后运行以下代码。 //StartingSheet.Cells(1, 1).Select; XLApp.Range['A1', 'A1'].Select; 我的例程存在,把控制权交还给用户。 ant走了…但是,如果我切换到表B,然后回到表A,我可以看到单元格A1有一个实线,显示它有焦点,我最后的COPYselect将再次显示行军的ant。 在看文档时,有一个例程叫cutcopymode。 它不具有TRUE / FALSE值,只有xlCopy或xlPaste。 所以… XLApp.cutcopymode := false; 给我一个错误。 我如何真正摆脱行军的ant? 谢谢