在powerbuilder 中控制excel制表
1.创建Excel对象
eole=CREATEOBJECT(′Excel.application′)
2.添加新工作簿
eole.Workbooks.add
3.设置第3个工作表为激活工作表
eole.Worksheets(″sheet3″).Activate
4.打开指定工作簿
eole.Workbooks.Open(″c:/temp/ll.xls″)
5.显示Excel窗口
eole.visible=.t.
6.更改Excel标题栏
eole.Caption=″VFP应用程序调用Microsoft Excel″
7.给单元格赋值
eole.cells(1,4).value=XM(XM为数据库字段名)
8.设置指定列的宽度(单位:字符个数)
eole.ActiveSheet.Columns(1).ColumnWidth=5
9.设置指定行的高度(单位:磅)
eole.ActiveSheet.Rows(1).RowHeight=1/0.035
(设定行高为1厘米,1磅=0.035厘米)
10.在第18行之前插入分页符
eole.Worksheets(″Sheet1″).Rows(18).PageBreak=1
11.在第4列之前删除分页符
eole.ActiveSheet.Columns(4).PageBreak=0
12.指定边框线宽度(Borders参数如下)
ole.ActiveSheet.Range(″b3:d3″).Borders(2).Weight=3
13.设置四个边框线条的类型
eole.ActiveSheet.Range(″b3:d3″).Borders(2).LineStyle=1
(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)
14.设置页眉
eole.ActiveSheet.PageSetup.CenterHeader=″报表1″
15.设置页脚
eole.ActiveSheet.PageSetup.CenterFooter=″第&P页″
16.设置页眉到顶端边距为2厘米
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035
17.设置页脚到底边距为3厘米
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035
18.设置顶边距为2厘米
eole.ActiveSheet.PageSetup.TopMargin=2/0.035
19.设置底边距为4厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035
20.设置左边距为2厘米
veole.ActiveSheet.PageSetup.LeftMargin=2/0.035
21.设置右边距为2厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035
22.设置页面水平居中
eole.ActiveSheet.PageSetup.CenterHorizontally=.t.
23.设置页面垂直居中
eole.ActiveSheet.PageSetup.CenterVertically=.t.
24.设置页面纸张大小(1-窄行8511 39-宽行1411)
eole.ActiveSheet.PageSetup.PaperSize=1
25.打印单元格网线
eole.ActiveSheet.PageSetup.PrintGridlines=.t.
26.拷贝整个工作表
eole.ActiveSheet.UsedRange.Copy
27.拷贝指定区域
eole.ActiveSheet.Range(″A1:E2″).Copy
28.粘贴
eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial
29.在第2行之前插入一行
eole.ActiveSheet.Rows(2).Insert
30.在第2列之前插入一列
eole.ActiveSheet.Columns(2).Insert
31.设置字体
eole.ActiveSheet.Cells(2,1).Font.Name=″黑体″
32.设置字体大小
eole.ActiveSheet.Cells(1,1).Font.Size=25
33.设置字体为斜体
eole.ActiveSheet.Cells(1,1).Font.Italic=.t.
34.设置整列字体为粗体
eole.ActiveSheet.Columns(1).Font.Bold=.t.
35.清除单元格公式
eole.ActiveSheet.Cells(1,4).ClearContents
36.打印预览工作表
eole.ActiveSheet.PrintPreview
37.打印输出工作表
eole.ActiveSheet.PrintOut
38.工作表另为
eole.ActiveWorkbook.SaveAs(″c:/temp/22.xls″)
39.放弃存盘
eole.ActiveWorkbook.saved=.t.
40.关闭工作簿
eole.Workbooks.close
41.退出Excel
eole.quit
---------------------------------------------
另加:
1、单元格合并
xlapp.ActiveSheet.range("A2:E2").merge //将A2:E2的单元格合并为一个单元格
2、设置单元格属性
文本:xlapp.ActiveSheet.range("A4:H"+String(numrows)).NumberFormat = '@' //区域内单位格文本设置
xlapp.ActiveSheet.cells(4,3).NumberFormat = '@' //4行3列的单位格设置为文本
时间: xlapp.ActiveSheet.cells(4,3).NumberFormat ='yyyy-mm-dd'
-----------------------------------------
eg:将freedom型数据窗口数据导出到excel中
//==============================================================================
// 事件: cb_export::clicked()
//------------------------------------------------------------------------------
// 描述: 保存数据窗口数据到excel
//------------------------------------------------------------------------------
// 参数: (无)
//------------------------------------------------------------------------------
// 返回值: (无)
//------------------------------------------------------------------------------
// 作者: lnn 日期: 2008.03.18
//------------------------------------------------------------------------------
// 修改历史:
//
//==============================================================================
Long numcols,numrows ,c,r,ll_progress
OLEObject xlapp , xlsub
Int ret , li_rc
String v_aac001,v_aac003,v_aac002,v_aac004,v_aac008,v_aac006
String ls_SaveFileName,ls_SavePath
ls_SavePath = "D:/单位人员明细表"
IF NOT DirectoryExists(ls_SavePath) THEN
CreateDirectory (ls_SavePath)
END IF
numcols = Long(dw_ry.Object.DataWindow.Column.Count ) - 2 //总列数
numrows = dw_ry.RowCount() //总行数
xlapp = CREATE OLEObject
ret = xlapp.ConnectToNewObject( "Excel.application" )
IF ret < 0 THEN
MessageBox("Connect to Excel Failed!",String(ret))
RETURN
END IF
xlapp.Application.Workbooks.add
xlapp.Application.Visible = FALSE
xlsub = xlapp.Application.ActiveWorkbook.Worksheets[1]
//---------标题头操作
//合并单元格
xlapp.ActiveSheet.range("A1:H1").merge
//设置字体
xlapp.ActiveSheet.Cells(1,1).Font.Name = "黑体"
//设置字体大小
xlapp.ActiveSheet.Cells(1,1).Font.Size = 16
//设置整列字体为粗体
xlapp.ActiveSheet.Cells(1,1).Font.Bold = TRUE
//居中
xlapp.ActiveSheet.Cells(1,1).HorizontalAlignment = 3
//单元格赋值
xlapp.ActiveSheet.Cells(1,1).Value = "参保单位人员明细表"
//单位编号
xlapp.ActiveSheet.rows(2).Font.Bold = TRUE
xlapp.ActiveSheet.range("A2:E2").merge
xlapp.ActiveSheet.Cells(2,1).Font.Size = 10
xlapp.ActiveSheet.Cells(2,1).Font.Name = "黑体"
xlapp.ActiveSheet.Cells(2,1).HorizontalAlignment = 1
xlapp.ActiveSheet.Cells(2,1).Value = "单位名称: " + Trim(dw_ry.Object.aab004[1])
//
xlapp.ActiveSheet.range("F2:H2").merge
xlapp.ActiveSheet.Cells(2,6).Font.Size = 10
xlapp.ActiveSheet.Cells(2,6).Font.Name = "黑体"
xlapp.ActiveSheet.Cells(2,6).HorizontalAlignment = 1
xlapp.ActiveSheet.Cells(2,6).Value = "单位编号: "+ Trim(dw_ry.Object.aab001[1])
//列名赋值
xlapp.ActiveSheet.range("A3:H3").HorizontalAlignment = 3
xlapp.ActiveSheet.range("A3:H3").Font.Size = 10
xlapp.ActiveSheet.range("A3:H3").Font.Name = "宋体"
xlapp.ActiveSheet.Cells(3,1).ColumnWidth = 4
xlapp.ActiveSheet.Cells(3,1).Value = "序号"
xlapp.ActiveSheet.Cells(3,2).ColumnWidth = 9
xlapp.ActiveSheet.Cells(3,2).Value = "个人编号"
xlapp.ActiveSheet.Cells(3,3).ColumnWidth = 8
xlapp.ActiveSheet.Cells(3,3).Value = "个人姓名"
xlapp.ActiveSheet.Cells(3,4).ColumnWidth = 20
xlapp.ActiveSheet.Cells(3,4).Value = "身份证号"
xlapp.ActiveSheet.Cells(3,5).ColumnWidth = 4
xlapp.ActiveSheet.Cells(3,5).Value = "性别"
xlapp.ActiveSheet.Cells(3,6).ColumnWidth = 11
xlapp.ActiveSheet.Cells(3,6).Value = "出生日期"
xlapp.ActiveSheet.Cells(3,7).ColumnWidth = 7
xlapp.ActiveSheet.Cells(3,7).Value = "人员状态"
xlapp.ActiveSheet.Cells(3,8).ColumnWidth = 15
xlapp.ActiveSheet.Cells(3,8).Value = "是否参加失业保险"
//messagebox("",numrows)
xlapp.ActiveSheet.range("A4:H"+String(numrows+4)).NumberFormat = '@'
xlapp.ActiveSheet.range("A4:C"+String(numrows+4)).HorizontalAlignment = 3
xlapp.ActiveSheet.range("D4:D"+String(numrows+4)).HorizontalAlignment = 1
xlapp.ActiveSheet.range("E4:H"+String(numrows+4)).HorizontalAlignment = 3
xlapp.ActiveSheet.range("A4:H"+String(numrows+4)).Font.Size = 10
FOR c = 1 TO numrows
r = c + 3
v_aac001 = Trim(dw_ry.Object.aac001[c])
v_aac003 = Trim(dw_ry.Object.aac003[c])
v_aac002 = Trim(dw_ry.Object.aac002[c])
CHOOSE CASE Trim(dw_ry.Object.aac004[c])
CASE "1"
v_aac004 = '男'
CASE "2"
v_aac004 = '女'
CASE ELSE
v_aac004 = ''
END CHOOSE
v_aac006 = Trim(String(dw_ry.Object.aac006[c],'yyyy-mm-dd'))
CHOOSE CASE Trim(dw_ry.Object.aac008[c])
CASE '11'
v_aac008 = '在职'
CASE '21'
v_aac008 = '离退'
CASE '31'
v_aac008 = '离休'
CASE ELSE
v_aac008 = ' '
END CHOOSE
xlapp.ActiveSheet.Cells(r,1).Value = String(c)
xlapp.ActiveSheet.Cells(r,2).Value = v_aac001
xlapp.ActiveSheet.Cells(r,3).Value = v_aac003
xlapp.ActiveSheet.Cells(r,4).Value = v_aac002
xlapp.ActiveSheet.Cells(r,5).Value = v_aac004
xlapp.ActiveSheet.Cells(r,6).Value = v_aac006
xlapp.ActiveSheet.Cells(r,7).Value = v_aac008
xlapp.ActiveSheet.Cells(r,8).Value = " "
ll_progress = Integer(Round(c*100/numrows,0))
hpb_progress.Position = ll_progress
st_progress.Text = String(ll_progress)+'%'
NEXT
//统计信息
long ll_tj
ll_tj = numrows + 4
xlapp.ActiveSheet.range("A"+String(ll_tj)+":E"+String(ll_tj)).merge
xlapp.ActiveSheet.Cells(ll_tj,1).Value = "总人数:"+Trim(dw_ry.Object.com_zrs[1])+ &
+" 在职人数:"+Trim(dw_ry.Object.com_zz[1]) &
+" 离退人数:"+Trim(dw_ry.Object.com_lt[1]) &
+" 离休人数:"+Trim(dw_ry.Object.com_lx[1])
xlapp.ActiveSheet.Cells(ll_tj,7).Value = "制表时间:"
xlapp.ActiveSheet.Cells(ll_tj,8).Value = Trim(dw_ry.Object.com_date[1])
//画表格线
String ls_range
ls_range = "A3:H" + Trim(String(numrows+3))
xlapp.Application.range(ls_range).borders(1).LineStyle = 1
xlapp.Application.range(ls_range).borders(2).LineStyle = 1
xlapp.Application.range(ls_range).borders(3).LineStyle = 1
xlapp.Application.range(ls_range).borders(4).LineStyle = 1
//保存文件
ls_SaveFileName = ls_SavePath+"/" +Trim(dw_ry.Object.aab004[1]) +".xls"
xlapp.Application.ActiveWorkbook.saved = FALSE
IF FileExists(ls_SaveFileName) THEN
FileDelete(ls_SaveFileName)
END IF
xlapp.ActiveWorkbook.SaveAs(ls_SaveFileName)
//关闭
xlapp.quit
xlapp.DisconnectObject()
DESTROY xlapp
MessageBox("提示","单位:"+Trim(dw_ry.Object.aab004[1]) &
+"~n~n人员清单成功导入EXCEL!~n~n文件保存路径:~"" &
+ ls_SaveFileName+"~"")
Ole_object.Workbooks.add//新建一个Excel文件
Ole_object.Workbooks.Open( "FileName ")//打开一个已存在Excel文件
Ole_object.ActiveWorkBook.Sheets( "SheetName ").Select//选择文件中一个工作表
Ole_object.Application.Run( "MacroName ")//运行宏
Ole_object.Application.Visible=TRUE//Excel文件可见
Ole_object.Application.ScreenUpdating=true//设置可见属性
②格式设置
Ole_object.ActiveSheet.Columns( "A:U ").AutoFit//列宽自动调整
Ole_object.ActiveSheet.Columns( "A:Z ").ColumnWidth=6.75//列宽
Ole_object.ActiveSheet.Rows( "1:100 ").RowHeight=12//行高
Ole_object.Application.StandardFont= "ArialNarrow ";//设置字体
Ole_object.Application.StandardFontSize= "8 "//设置字号
Ole_object.ActiveSheet.Font.Size= "8 "//设置字号
Ole_object.ActiveSheet.Font.Bold=True//粗体
Ole_object.ActiveSheet.Font.Italic=True//斜体
Ole_object.ActiveSheet.Font.Underline=True//下划线
Ole_object.ActiveSheet.Font.StrikeThrough=True//删除线
Ole_object.ActiveSheet.HorizontalAlignment=3//水平:4靠右;3居中;2靠左
Ole_object.ActiveSheet.VerticalAlignment=2//垂直:3靠下;2居中;1靠上
Ole_object.ActiveSheet.cells(2,1).font.name=’黑体’//设置字体
Ole_object.ActiveSheet.cells(2,1).font.size=25//设置字体大小
③工作区域操作:
Ole_object.ActiveSheet.Range( "A1:Z10 ").Property=value//设置一个工作区域内的属性值
Ole_object.ActiveSheet.Range( "A1:Z10 ").Merge//合并单元格
Ole_object.ActiveSheet.Range( "A1:Z10 ").WrapText=False//自动换行禁止
Ole_object.ActiveSheet.Range( "A1:Z10 ").Borders(b_type).Weight=i_val//b_type:1左边界;2右边界;3上边界;4下边界;5左上倾斜;6
右上倾斜(以上为对单元格的操作)7左边界;8上边界;9下边界;10右边界;11内部垂直边界;12内部水平边界(以上为对区域的操
作)//i_val:0无边界线;然后1,2,3。。。依次边界线加粗
Ole_object.ActiveSheet.Range( "A1:Z10 ").Borders(b_type).linestyle=1//1与7—细实、2—细虚、4—点虚、9—双细实线
④赋值操作
Ole_object.ActiveSheet.range( "A1:Z10 ").Cells.value=“姓名”
Ole_object.ActiveSheet.range( "A1:Z10 ").Cells.value=1
Ole_object.ActiveSheet.range( "A1:Z10 ").Cells.value=“2003-01-01”
Ole_object.ActiveSheet.Range( "A1:Z10 ").Cells(1,2).value=“年龄”//区域内一个单元格的赋值
Ole_object.ActiveSheet.Range( "A1:Z1 ").Cells(1,1).value=“SUM(RC[-9]:RC[-1])”
ls_filename = "C:/alt_report/wf_alt_report.xls "
if FileExists(ls_filename) then FileDelete(ls_filename)
OleObject Loo_Excel
Loo_Excel=create oleobject
if Loo_Excel.ConnectToNewObject( "Excel.Application ") <> 0 then
messagebox( '提示 ', '系統未安裝Excel,無法運行此操作! ')
return
end if
Loo_Excel.Application.Workbooks.Add()
Loo_Excel.Application.Workbooks(1).worksheets(1)
Loo_Excel.Application.Visible = True
Loo_Excel.Application.ScreenUpdating = false
// '正在處理表頭...... '
Loo_Excel.Range( "A1:AB1 ").Select
Loo_Excel.Selection.MergeCells = True
Loo_Excel.Selection.HorizontalAlignment = 3
Loo_Excel.Selection.VerticalAlignment = 3
Loo_Excel.Selection.Font.Bold = True
Loo_Excel.Selection.Font.Size = 14
Loo_Excel.Selection.RowHeight = 28.50
Loo_Excel.ActiveCell.FormulaR1C1 = dw_3.describe( "ls_title "+ ".text ")
///写标头
Loo_Excel.application.workbooks(1).worksheets(1).cells(3, 1 ).value = "排單號碼 "
// dw_2.describe( "po_no "+ ".name "+ "_t.text ")
Loo_Excel.application.workbooks(1).worksheets(1).cells(3, 2 ).value = "客人款號 "
Loo_Excel.application.workbooks(1).worksheets(1).cells(3, 3 ).value = dw_2.describe( "cust_nam_t.text ")
///内容
for i=1 to dw_2.rowcount()
Loo_Excel.application.workbooks(1).worksheets(1).cells(3+i, 1).value = string( dw_2.object.po_no[i] )
next
Loo_Excel.application.ActiveWorkbook.SaveAs(ls_filename)
Loo_Excel.Application.ScreenUpdating = True
Loo_Excel.DisconnectObject()
-----------------------------------------------------------------
也可以从Excel提取信息,假设你想知道当前活动Sheet的A1单元(Cell)的值,
你可以使用如下代码:
ANY MyValue
MyValue = ExcelServer.ActiveSheet.Cells(1,1).value
CHOOSE CASE ClassName(MyValue)
CASE 'string '
//assign to string
//other data types here
......
END CASE
注意ANY变量的用法。返回的Excel对象的method/property可能是各种各样的数据
类型,所以除非你绝对确定返回类型(例如一个Cell对象的ColumnWidth属性一般都
返回的是integer变量),你一般都要使用ANY变量,然后再用ClassName函数来确定
对应的值。