主题:转贴:关于的VFP与EXCEL的贴子(请大家能够尽量补充)
声明:此为转贴。(不记得在哪个论坛翻出来的了) 请大家将相关知识补充一下,力争尽量全面。谢谢大家。
eole=CREATEOBJECT("Excel.application") &&创建Excel对象
IF NOT TYPE("eole) = "O"
=MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")
RETURN
ENDIF
eole.sheetsinnewworkbook=4 &&设置新增工作簿中工作表数
eole.Workbooks.add &&添加新工作簿 **eole.workbooks.add('&mycurdir1.ptjh_hz.xlt') &&添加模板
eole.Worksheets('sheet3').Activate &&设置第3个工作表为激活工作表
*eole.Workbooks.Open('c:\temp\ll.xls')&&打开指定工作簿
oEle.Workbooks.Open("d:\22.xls",.f.,.f., ,"123","456") &&打开有密码的Excel文件,"123"表示打开权限的密码,"456"表示修改权限的密码.第二个参数表示读写方式:.T.只读,.F.读写
**当前工作薄工作表总数:oExcel.WorkSheets.Count &&如:lnSheetCnt=oExcel.WorkSheets.count
** 在指定工作表后新建工作表:oExcel.Sheets.Add(,oExcel.Sheets(lnSheet),1,-4167) &&lnSheet为指定表号
** 在最后工作表后新建工作表:oExcel.Sheets.Add(,lnSheetsCnt,1,-4167) &&lnSheetCnt为工作表总数
** 命名工作表:oExcel.WorkSheets("Sheet3").Name="新表" &&重命名工作表3
**Excel的窗口控制:oExcel.WindowState = -4140 &&最小化=-4140,最大化=-4137,还原=-4143
eole.visible=.t. &&显示Excel窗口
eole.Caption='VFP应用程序调用Microsoft Excel'&&更改Excel标题栏
*eole.cells(1,4).value=XM &&(XM为数据库字段名) &&给单元格赋值
eole.cells(1,2).value="AF" && 给单元格赋值
eole.Range("A2:B2").select
eole.selection.MergeCells = .T. && 合并单元
eole.range("A2 ").value='情况统计表'
eole.range("A2 ").NumberFormatLocal = "@" &&字符型
eole.ActiveSheet.Range("A1:BE29").NumberFormatLocal =;
"_ * #,##0.00_ ; _ * -#,##0.00_ ;_ * "+"-"+"??_ ;_ @_ " && 指定区域内的数字显示格式
eole.selection.HorizontalAlignment=2 && 水平方向 2左对齐,3居中,4右对齐
eole.selection.VerticalAlignment = 2 && 垂直方向 1靠上 ,2居中,3靠下
eole.Range("A5:M5").select
eole.Selection.Interior.ColorIndex = 34 && 设置行颜色为[淡兰]
eole.selection.WrapText = .T. && 自动换行
eole.ActiveSheet.Cells(2,1).Font.Name='黑体' &&设置字体
eole.ActiveSheet.Cells(1,1).Font.Size=25 &&设置字体大小
eole.ActiveSheet.Cells(1,1).Font.Italic=.t. &&设置字体为斜体
eole.ActiveSheet.Columns(1).Font.Bold=.t. &&设置整列字体为粗体
*vfp_excel.ActiveCell.Characters.Font.Underline = 2 &&下划线
vfp_excel.ActiveCell.Characters.Font.ColorIndex = 0 &&字符颜色
vfp_excel.cells(lines+rwi,9).NumberFormatLocal = "0" &&规定小数点位数
ef.Columns("A").Select &&整列选择
ef.Cells.Select &&选择整张表
ef.Selection.Font.Size = 10 &&设置整表默认字体大小为10
eole.ActiveSheet.Columns(A:B).ColumnWidth=30 &&设置指定列的宽度(单位:字符个数)
eole.ActiveSheet.Rows(1).RowHeight=1/0.035 &&设置指定行的高度为1厘米,1磅=0.035厘米
eole.Selection.Columns.AutoFit && 最适合的列宽
eole.ActiveSheet.Range('b3:d3').Borders(2).Weight=3 &&指定边框线宽度(Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/)
eole.ActiveSheet.Range('b3:d3').Borders(2).LineStyle=1 &&设置四个边框线条的类型 LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)
&&能不能指定在某一位置或区域放置图片并控制图片显示大小呢?
OLEAPP.SHEETS(1).SELECT
oleapp.Range("位置").Select
oleapp.ActiveSheet.Pictures.Insert("图片文件名")).Select
oleapp.Selection.ShapeRange.LockAspectRatio =.T.
oleapp.Selection.ShapeRange.Height = 57
*******问题:类型为字符型的字段输出到excel 中,前面的零被自动去掉,例如"009877"变为"9877",怎么解决?
*1.在字符串前面加半角单引号" ' "
*2.eole.Range("A1:Y1").Select
*eole.Selection.NumberFormatLocal = "@"
[未完]
******
*!* 获取 Excel 记录数
*!* loXls = CREATEOBJECT("excel.application")
*!* bookExcel = loXls.APPLICATION.Workbooks.OPEN("f:\pz.xls")
*!* nrows=bookExcel.Worksheets('pz')
*!* UsedRange =nrows.UsedRange
*!* r = UsedRange.ROWS.COUNT &&行数
*!* c = UsedRange.COLUMNS.COUNT &&列数
*****页面设置
**预览当前工作表:oExcel.ActiveSheet.PrintPreview
*!* .CenterFooter="第"+"&P"+"页 共"+"&N"+"页" &&页脚中间
** .rightfooter="制表:松涛" &&页脚右边
*!* .PaperSize=9 &&纸张类型: A4(注意:不同打印机与版本可能有不同)
*!* .PrintQuality = 180 &&打印精度
oleapp.sheets.item(1).pagesetup.CenterHorizontally=.t.&&页面水平居中
*oleapp.sheets.item(1).pagesetup.CenterVertically=.t. &&页面垂直居中
eole.ActiveSheet.PageSetup.CenterHeader='报表1' &&设置页眉
eole.ActiveSheet.PageSetup.CenterFooter='第&P页' &&设置页脚
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035 &&设置页眉到顶端边距为2厘米
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035 &&设置页脚到底边距为3厘米
eole.ActiveSheet.PageSetup.TopMargin=2/0.035 &&设置顶边距为2厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035 &&设置底边距为4厘米
eole.ActiveSheet.PageSetup.LeftMargin=2/0.035 &&设置左边距为2厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035 &&设置右边距为2厘米
eole.ActiveSheet.PageSetup.CenterHorizontally=.t. &&设置页面水平居中
eole.ActiveSheet.PageSetup.CenterVertically=.t. &&设置页面垂直居中
eole.ActiveSheet.PageSetup.PaperSize=1 &&设置页面纸张大小(1-窄行8511 39-宽行1411)
eole.ActiveSheet.PageSetup.Orientation=2 && 横向
eole.ActiveSheet.PageSetup.PrintTitleRows="$1:$3" && 定义固定行 顶端标题行
eole.ActiveSheet.PageSetup.PrintTitleColumns="$A:$C" && 定义固定列
eole.ActiveSheet.PageSetup.CenterHeader= "&14&BTMC" && 设置页眉
eole.ActiveSheet.PageSetup.CenterFooter="表__第&P页" && 设置页脚
oExl.ActiveSheet.PageSetup.Zoom=Thisform.spnZoom.Value &&缩放比例
eole.ActiveSheet.PageSetup.PrintGridlines=.t. &&打印单元格网线
eole.ActiveSheet.PrintPreview &&打印预览工作表
eole.ActiveSheet.PrintOut &&打印输出工作表
*******5设置打印参数:用Excel做报表,可打印时怎么选择打印机,即.ActiveWindow.SelectedSheets.PrintOut的参数有哪些?
expression.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)
**expression 必选。该表达式返回"应用于"列表中的某个对象。
**From Variant 类型,可选。打印的开始页号。如果省略该参数,将从起始位置开始打印。
*!* To Variant 类型,可选。打印的终止页号。如果省略该参数,将打印至最后一页。
*!* Copies Variant 类型,可选。要打印的份数。如果省略该参数,将只打印一份。
*!* Preview Variant 类型,可选。如果为 True 则 Microsoft Excel 打印指定对象之前进行打印预览。如果为 False,或者省略此参数则立即打印该对象。
*!* ActivePrinter Variant 类型,可选。 设置活动打印机的名称。
*!* PrintToFile Variant 类型,可选。如果为 True 则打印输出到文件。如果没有指定 PrToFileName,则 Microsoft Excel 将提示用户输入要输出文件的文件名。
*!* Collate Variant 类型,可选。如果为 True 则逐份打印每份副本。
*!* PrToFileName 可选,Variant 类型。如果将 PrintToFile 设置为 True,则本参数指定要打印到的文件名。
*!* **说明
*!* From 参数和 To 参数所描述的"页"指的是要打印的页,并非指定工作表或工作簿中的全部页。
**打印当前工作簿:oExcel.ActiveWorkBook.PrintOut(1,oExcel.WorkSheets.count,1,.T.)
*默认直接打印整个工作簿:oExcel.ActiveWorkBook.PrintOut()
*参数1-数值:当前工作簿中进行打印的起始工作表号(默认1)
*参数2-数值:当前工作簿中进行打印的结束工作表号(默认最末)
*参数3-数值:打印份数(默认1)
*参数4-是预览打印还是直接打印:.T.-预览打印,.F.-直接打印(默认.F.)
**打印当前工作表:oExcel.ActiveSheet.PrintOut() &&共八个参数
*参数1-数值:起始页号,省略则默认为开始位置
*参数2-数值:终止页号,省略则默认为最后一页
*参数3-数值:打印份数,省略则默认为1份
*参数4-逻辑值:是否预览,省略则默认为直接打印(.F.)
*参数5-字符值:设置活动打印机名称,省略则为默认打印机
*参数6-逻辑值:是否输出到文件,省略则默认为否(.F.),若选.T.且参数8为空,则Excel提示输入要输出的文件名
*参数7-逻辑值:输出类型,省略则默认为(.T.)逐份打印,否则逐页打印
*参数8-字符值:当参数6为.T.时,设置要打印到的文件名
**用VFP控制EXECL的选择打印机的窗口
oExcel.application.dialogs(8).show
***********
eole.ActiveWorkbook.SaveAs('c:\temp\22.xls') &&工作表另为
** 换名存为文本文件:oExcel.ActiveWorkBook.Saveas("&lcFileName",-4158)
** 加密码换名存盘:oExcel.ActiveWorkbook.SaveAs(&lcFileName,-4143,[3721],[3721],.F., .F.)
eole.ActiveWorkbook.saved=.t. &&放弃存盘
eole.Workbooks.close &&关闭工作簿
eole.quit &&退出Excel
RELEASE eole &&释放变量 以真正退出 Excel
eole=CREATEOBJECT("Excel.application") &&创建Excel对象
IF NOT TYPE("eole) = "O"
=MESSAGEBOX("Excel对象创建失败,程序将中止!", 16, "Error")
RETURN
ENDIF
eole.sheetsinnewworkbook=4 &&设置新增工作簿中工作表数
eole.Workbooks.add &&添加新工作簿 **eole.workbooks.add('&mycurdir1.ptjh_hz.xlt') &&添加模板
eole.Worksheets('sheet3').Activate &&设置第3个工作表为激活工作表
*eole.Workbooks.Open('c:\temp\ll.xls')&&打开指定工作簿
oEle.Workbooks.Open("d:\22.xls",.f.,.f., ,"123","456") &&打开有密码的Excel文件,"123"表示打开权限的密码,"456"表示修改权限的密码.第二个参数表示读写方式:.T.只读,.F.读写
**当前工作薄工作表总数:oExcel.WorkSheets.Count &&如:lnSheetCnt=oExcel.WorkSheets.count
** 在指定工作表后新建工作表:oExcel.Sheets.Add(,oExcel.Sheets(lnSheet),1,-4167) &&lnSheet为指定表号
** 在最后工作表后新建工作表:oExcel.Sheets.Add(,lnSheetsCnt,1,-4167) &&lnSheetCnt为工作表总数
** 命名工作表:oExcel.WorkSheets("Sheet3").Name="新表" &&重命名工作表3
**Excel的窗口控制:oExcel.WindowState = -4140 &&最小化=-4140,最大化=-4137,还原=-4143
eole.visible=.t. &&显示Excel窗口
eole.Caption='VFP应用程序调用Microsoft Excel'&&更改Excel标题栏
*eole.cells(1,4).value=XM &&(XM为数据库字段名) &&给单元格赋值
eole.cells(1,2).value="AF" && 给单元格赋值
eole.Range("A2:B2").select
eole.selection.MergeCells = .T. && 合并单元
eole.range("A2 ").value='情况统计表'
eole.range("A2 ").NumberFormatLocal = "@" &&字符型
eole.ActiveSheet.Range("A1:BE29").NumberFormatLocal =;
"_ * #,##0.00_ ; _ * -#,##0.00_ ;_ * "+"-"+"??_ ;_ @_ " && 指定区域内的数字显示格式
eole.selection.HorizontalAlignment=2 && 水平方向 2左对齐,3居中,4右对齐
eole.selection.VerticalAlignment = 2 && 垂直方向 1靠上 ,2居中,3靠下
eole.Range("A5:M5").select
eole.Selection.Interior.ColorIndex = 34 && 设置行颜色为[淡兰]
eole.selection.WrapText = .T. && 自动换行
eole.ActiveSheet.Cells(2,1).Font.Name='黑体' &&设置字体
eole.ActiveSheet.Cells(1,1).Font.Size=25 &&设置字体大小
eole.ActiveSheet.Cells(1,1).Font.Italic=.t. &&设置字体为斜体
eole.ActiveSheet.Columns(1).Font.Bold=.t. &&设置整列字体为粗体
*vfp_excel.ActiveCell.Characters.Font.Underline = 2 &&下划线
vfp_excel.ActiveCell.Characters.Font.ColorIndex = 0 &&字符颜色
vfp_excel.cells(lines+rwi,9).NumberFormatLocal = "0" &&规定小数点位数
ef.Columns("A").Select &&整列选择
ef.Cells.Select &&选择整张表
ef.Selection.Font.Size = 10 &&设置整表默认字体大小为10
eole.ActiveSheet.Columns(A:B).ColumnWidth=30 &&设置指定列的宽度(单位:字符个数)
eole.ActiveSheet.Rows(1).RowHeight=1/0.035 &&设置指定行的高度为1厘米,1磅=0.035厘米
eole.Selection.Columns.AutoFit && 最适合的列宽
eole.ActiveSheet.Range('b3:d3').Borders(2).Weight=3 &&指定边框线宽度(Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/)
eole.ActiveSheet.Range('b3:d3').Borders(2).LineStyle=1 &&设置四个边框线条的类型 LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)
&&能不能指定在某一位置或区域放置图片并控制图片显示大小呢?
OLEAPP.SHEETS(1).SELECT
oleapp.Range("位置").Select
oleapp.ActiveSheet.Pictures.Insert("图片文件名")).Select
oleapp.Selection.ShapeRange.LockAspectRatio =.T.
oleapp.Selection.ShapeRange.Height = 57
*******问题:类型为字符型的字段输出到excel 中,前面的零被自动去掉,例如"009877"变为"9877",怎么解决?
*1.在字符串前面加半角单引号" ' "
*2.eole.Range("A1:Y1").Select
*eole.Selection.NumberFormatLocal = "@"
[未完]
******
*!* 获取 Excel 记录数
*!* loXls = CREATEOBJECT("excel.application")
*!* bookExcel = loXls.APPLICATION.Workbooks.OPEN("f:\pz.xls")
*!* nrows=bookExcel.Worksheets('pz')
*!* UsedRange =nrows.UsedRange
*!* r = UsedRange.ROWS.COUNT &&行数
*!* c = UsedRange.COLUMNS.COUNT &&列数
*****页面设置
**预览当前工作表:oExcel.ActiveSheet.PrintPreview
*!* .CenterFooter="第"+"&P"+"页 共"+"&N"+"页" &&页脚中间
** .rightfooter="制表:松涛" &&页脚右边
*!* .PaperSize=9 &&纸张类型: A4(注意:不同打印机与版本可能有不同)
*!* .PrintQuality = 180 &&打印精度
oleapp.sheets.item(1).pagesetup.CenterHorizontally=.t.&&页面水平居中
*oleapp.sheets.item(1).pagesetup.CenterVertically=.t. &&页面垂直居中
eole.ActiveSheet.PageSetup.CenterHeader='报表1' &&设置页眉
eole.ActiveSheet.PageSetup.CenterFooter='第&P页' &&设置页脚
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035 &&设置页眉到顶端边距为2厘米
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035 &&设置页脚到底边距为3厘米
eole.ActiveSheet.PageSetup.TopMargin=2/0.035 &&设置顶边距为2厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035 &&设置底边距为4厘米
eole.ActiveSheet.PageSetup.LeftMargin=2/0.035 &&设置左边距为2厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035 &&设置右边距为2厘米
eole.ActiveSheet.PageSetup.CenterHorizontally=.t. &&设置页面水平居中
eole.ActiveSheet.PageSetup.CenterVertically=.t. &&设置页面垂直居中
eole.ActiveSheet.PageSetup.PaperSize=1 &&设置页面纸张大小(1-窄行8511 39-宽行1411)
eole.ActiveSheet.PageSetup.Orientation=2 && 横向
eole.ActiveSheet.PageSetup.PrintTitleRows="$1:$3" && 定义固定行 顶端标题行
eole.ActiveSheet.PageSetup.PrintTitleColumns="$A:$C" && 定义固定列
eole.ActiveSheet.PageSetup.CenterHeader= "&14&BTMC" && 设置页眉
eole.ActiveSheet.PageSetup.CenterFooter="表__第&P页" && 设置页脚
oExl.ActiveSheet.PageSetup.Zoom=Thisform.spnZoom.Value &&缩放比例
eole.ActiveSheet.PageSetup.PrintGridlines=.t. &&打印单元格网线
eole.ActiveSheet.PrintPreview &&打印预览工作表
eole.ActiveSheet.PrintOut &&打印输出工作表
*******5设置打印参数:用Excel做报表,可打印时怎么选择打印机,即.ActiveWindow.SelectedSheets.PrintOut的参数有哪些?
expression.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)
**expression 必选。该表达式返回"应用于"列表中的某个对象。
**From Variant 类型,可选。打印的开始页号。如果省略该参数,将从起始位置开始打印。
*!* To Variant 类型,可选。打印的终止页号。如果省略该参数,将打印至最后一页。
*!* Copies Variant 类型,可选。要打印的份数。如果省略该参数,将只打印一份。
*!* Preview Variant 类型,可选。如果为 True 则 Microsoft Excel 打印指定对象之前进行打印预览。如果为 False,或者省略此参数则立即打印该对象。
*!* ActivePrinter Variant 类型,可选。 设置活动打印机的名称。
*!* PrintToFile Variant 类型,可选。如果为 True 则打印输出到文件。如果没有指定 PrToFileName,则 Microsoft Excel 将提示用户输入要输出文件的文件名。
*!* Collate Variant 类型,可选。如果为 True 则逐份打印每份副本。
*!* PrToFileName 可选,Variant 类型。如果将 PrintToFile 设置为 True,则本参数指定要打印到的文件名。
*!* **说明
*!* From 参数和 To 参数所描述的"页"指的是要打印的页,并非指定工作表或工作簿中的全部页。
**打印当前工作簿:oExcel.ActiveWorkBook.PrintOut(1,oExcel.WorkSheets.count,1,.T.)
*默认直接打印整个工作簿:oExcel.ActiveWorkBook.PrintOut()
*参数1-数值:当前工作簿中进行打印的起始工作表号(默认1)
*参数2-数值:当前工作簿中进行打印的结束工作表号(默认最末)
*参数3-数值:打印份数(默认1)
*参数4-是预览打印还是直接打印:.T.-预览打印,.F.-直接打印(默认.F.)
**打印当前工作表:oExcel.ActiveSheet.PrintOut() &&共八个参数
*参数1-数值:起始页号,省略则默认为开始位置
*参数2-数值:终止页号,省略则默认为最后一页
*参数3-数值:打印份数,省略则默认为1份
*参数4-逻辑值:是否预览,省略则默认为直接打印(.F.)
*参数5-字符值:设置活动打印机名称,省略则为默认打印机
*参数6-逻辑值:是否输出到文件,省略则默认为否(.F.),若选.T.且参数8为空,则Excel提示输入要输出的文件名
*参数7-逻辑值:输出类型,省略则默认为(.T.)逐份打印,否则逐页打印
*参数8-字符值:当参数6为.T.时,设置要打印到的文件名
**用VFP控制EXECL的选择打印机的窗口
oExcel.application.dialogs(8).show
***********
eole.ActiveWorkbook.SaveAs('c:\temp\22.xls') &&工作表另为
** 换名存为文本文件:oExcel.ActiveWorkBook.Saveas("&lcFileName",-4158)
** 加密码换名存盘:oExcel.ActiveWorkbook.SaveAs(&lcFileName,-4143,[3721],[3721],.F., .F.)
eole.ActiveWorkbook.saved=.t. &&放弃存盘
eole.Workbooks.close &&关闭工作簿
eole.quit &&退出Excel
RELEASE eole &&释放变量 以真正退出 Excel