Tag: delphi

Ole Excel Delphidate问题

我有一个Delphi应用程序使用类似于以下代码从Excel电子表格中读取数据: procedure TForm1.Button1Click(Sender: TObject); var xlApp, xlWorkBook, xlWorkSheet, arr: Variant; begin xlApp := CreateOLEObject('Excel.Application'); xlApp.Visible := False; xlWorkBook := xlApp.Workbooks.Open('C:\Temp\Book1.xlsx'); xlWorkSheet := xlApp.WorkSheets[1]; arr := xlWorksheet.Range['E2:E2'].Value; xlApp.Quit; end; 单元格E2:E2中存储在电子表格中的值为10/01/1900(年/月/年)。 但是,返还的价格是09/01/1900,即前一天。 为什么在1900年以后的其他年份的所有date都能正常工作呢?

Delphi的Excel自动化的Excel获取文本和价值

我正在寻找在Delphi 7中使用Ole Automation在Excel电子表格中提取给定范围内的每个单元格的文本。 刚刚我有一个函数(假设工作簿已经打开)从工作表中select一个范围,并使用.Value2函数填充一个Variant数组 function GetExcelRange(const AWorkbookIndex: integer; const AWorksheetIndex: integer; const firstCol, lastCol, firstRow, lastRow: integer): Variant; var AWorkbook, ARange: OleVariant; begin Result := Unassigned; if not VarIsEmpty(ExcelApp) then begin if ExcelApp.Workbooks.Count >= AWorkbookIndex then begin AWorkbook := ExcelApp.Workbooks[AWorkbookIndex]; try if AWorkbook.Worksheets.Count >= AWorksheetIndex then begin; ARange := AWorkbook.WorkSheets[AWorksheetIndex].Range[AWorkbook.WorkSheets[AWorksheetIndex].Cells[firstRow, firstCol], AWorkbook.WorkSheets[AWorksheetIndex].Cells[lastRow, lastCol]]; Result := […]

Delphi 7 with..do语句不能使用variablesvariables

我正在通过Delphi 7与Microsoft Excel。它工作正常,但格式化行和范围,我不得不写这样的长string。 XLApp.Workbooks[1].WorkSheets[NameDoc].Range['A19:L19'].Font.Bold := true; 所以我想摆脱艰苦的工作,并通过像这样的“… ..”声明来做到这一点 with XLApp.Workbooks[1].WorkSheets[NameDoc] do begin Range['A19:L19'].Font.Bold := true; end; 但在汇编阶段,我看到这个错误 Record, object or class type required 在string上 – “with..do”。 我用这种方法创buildExcel对象 XLApp: Variant; XLApp := CreateOleObject('Excel.Application'); 我认为,.. do语句doesen不适用于variablestypesvariables,但我想知道我是否正确? 如果我是对的,有什么解决办法,使其工作?

Excel – 如何忽略公式等于没有什么行?

我正在使用Microsft Office Interop API。 我的问题属于Excel。 我使用Interop API编写了一个程序来格式化Excel文档,然后将它们发送到打印机。 但问题是,我们偶尔会在人们创build一个跨越65,000多行的列的文件中运行,它所包含的是一个公式。 该公式仅为前100行左右创build输出,然后其余显示为空白。 但是,当发送到打印机,它试图打印像10,000页或东西,因为这些公式。 我首先想方设法告诉Excel不要打印这些范围。 我无法find任何设置忽略这些。 其次,我想过如何以编程方式来完成这个任务,但是这个逻辑会非常复杂,并且可能会导致不包含像这样的公式的“常规”文件出现问题。 有没有人知道有一个很好的方法让Excel忽略这些公式,等于没有? 我正在使用Delphi和Office 2007 Interop API。

delphi自动化错误Excel 2010

有谁知道为什么下面的代码不适用于Excel 2010( 家庭和小型企业Office版 )? procedure TForm1.Button1Click(Sender: TObject); var rango : OleVariant; ExcelObject : TExcelApplication; ExcelWorksheet : TExcelWorksheet; LCID : integer; begin try ExcelObject := TExcelApplication.Create (self); LCID := LOCALE_USER_DEFAULT; ExcelObject.Workbooks.Add(EmptyParam, LCID); ExcelWorksheet := TExcelWorksheet.Create(ExcelObject); ExcelWorksheet.ConnectTo(ExcelObject.Worksheets.Item [1] as _Worksheet); rango := ExcelWorksheet.Range['B2','B2']; rango.Font.size := 16; rango.Font.Bold := True; rango.Value2 := 'test'; ExcelObject.Visible[lcid] := true; except on […]

创build和编辑密码保护的Excel文件

我正在使用delphi7,我想在我的程序中创build密码保护excel文件,也想通过仅使用代码取消保护来编辑它。 我的程序要求是我必须在excel文件中logging数据,但不会被最终用户编辑。所以我怎样才能使用delphi7呢? var xls, xlw: Variant; begin {load MS Excel} xls := CreateOLEObject('Excel.Application'); {open your xls-file} xlw := xls.WorkBooks.Open(FileName := 'd:\book1.xls', Password := 'qq', ReadOnly := True); {save with other file name} xlw.SaveAs(FileName := 'd:\book2.xls', Password := 'password'); {unload MS Excel} xlw := UnAssigned; xls := UnAssigned; end; 我试过,但得到程序只在保存密码保护的文件和创build密码保护的Excel文件后,我不能再次编辑同一个文件。 所以请帮助我。

从Delphi修改Excel形状

如何从Delphi中修改现有的 Excel形状的文本? 我可以创build一个新的形状,并设置其文本 procedure TForm1.Button1Click(Sender: TObject); var excel, xlShape : variant; begin olecontainer1.CreateObject('Excel.Application',false); excel := olecontainer1.OleObject; excel.workbooks.open('C:\test.xls'); XlShape := excel.application.worksheets[1].Shapes.AddShape(1, 0, 0, 450, 200); XlShape.textframe.characters.text:='new shape created from Delphi'; 但是,如果形状已经存在,我怎样才能select它来改变它的文本属性? 就像是: excel.application.worksheets[1].Shapes('shape1').textframe.characters.text := 'This gives error';

在Excel工作表中find最后使用的单元格行

我正在开发一个修改Excel文件的应用程序。 我怎样才能find最后使用的单元格在任何一行? 例如:行号最后使用的单元格数=> 5

如何导入实际值,而不是从excel格式化

我正在努力从Excel文件导入date值。 导入部分工作正常! 唯一的问题是它的格式。 在excel文件中,所有date值都以“yyyy-mm-dd”格式input,但单元格本身显示为“dd-mm-yyyy”。 当我的程序从excel文件导入值时,它将date导入为“dd-mm-yyyy”,而不是用户在“yyyy-mm-dd”中input的格式 – 基本上是格式化的date。 那么,我可以操纵“dd-mm-yyyy”到“yyyy-mm-dd”,但是想要避免这个解决scheme,除非我真的没有其他的方法来做到这一点。 有没有任何预定义的delphifunction扭转'dd-mm-yyyy'为'yyyy-mm-dd'? 还是有什么特殊的方法来实现未格式化的原始date,而不是格式化? 不幸的是,在excel中更改单元格格式在这里不是一个选项..:'( 谢谢。 更新::: ConnectionString :='Microsoft.ACE.OLEDB.12.0;'+ 'Data Source='+filename+';'+ 'Extended Properties="Excel 8.0;'+ 'Imex=2;HDR=NO;;'; } // IMEX = 0: Export mode, 1: Import mode, 2: Linked mode (full update capabilities) ADOQuery1.SQL.Clear; query := 'SELECT * FROM [sheet1$]'; ADOQuery1.SQL.Add(query); ADOQuery1.open; i:=0; while not eof do begin i:= i+1; Cells[0,i] […]

OLE自动化Delphi Excel图表标签定位

我从Delphi生成了一个excel饼图,除了当我想把标签(带有值)发送到饼图的外部时 所以我生成的派看起来像这样: 我想获得这个: 所以我的代码如下所示: if not CreateExcel then exit; VisibleExcel(false); if AddWorkBook then begin SelectSheet(1); end; AddChart(ChartName,xl3DPieExploded);//xl3DColumn); SetSourceData(1{ChartName},2,'A1:B5',xlColumns); randomize; VisibleExcel(false); E.ActiveWorkbook.Sheets.Item[2].Cells[1,1] :='Some text'; E.ActiveWorkbook.Sheets.Item[2].Cells[1,2] :='Chart title'; E.ActiveWorkbook.Sheets.Item[2].Cells[2,1] :='Mijloace de productie'; E.ActiveWorkbook.Sheets.Item[2].Cells[3,1] :='Mediul de munca'; E.ActiveWorkbook.Sheets.Item[2].Cells[4,1] :='Sarcina de munca'; E.ActiveWorkbook.Sheets.Item[2].Cells[5,1] :='Executant'; E.ActiveWorkbook.Sheets.Item[2].Cells[2,2] := FloatToStr(proc1)+'%'; E.ActiveWorkbook.Sheets.Item[2].Cells[3,2] := FloatToStr(proc2)+'%'; E.ActiveWorkbook.Sheets.Item[2].Cells[4,2] := FloatToStr(proc3)+'%'; E.ActiveWorkbook.Sheets.Item[2].Cells[5,2] := FloatToStr(proc4)+'%'; // remove the […]