PB中操作excel

在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-窄行8511 39-宽行1411)

  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函数来确定
对应的值。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值