用delphi操作excel
Category: delphi

Delphi 5 控制Excel

(一) 使用动态创建的方法

首先创建 Excel 对象,使用ComObj:
var ExcelApp: Variant;
ExcelApp := CreateOleObject( 'Excel.Application' );

1) 显示当前窗口:
ExcelApp.Visible := True;

2) 更改 Excel 标题栏:
ExcelApp.Caption := '应用程序调用 Microsoft Excel';

3) 添加新工作簿:
ExcelApp.WorkBooks.Add;

4) 打开已存在的工作簿:
ExcelApp.WorkBooks.Open( 'C:\Excel\Demo.xls' );

5) 设置第2个工作表为活动工作表:
ExcelApp.WorkSheets[2].Activate;

ExcelApp.WorksSheets[ 'Sheet2' ].Activate;

6) 给单元格赋值:
ExcelApp.Cells[1,4].Value := '第一行第四列';

7) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApp.ActiveSheet.Columns[1].ColumnWidth := 5;

8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

9) 在第8行之前插入分页符:
ExcelApp.WorkSheets[1].Rows.PageBreak := 1;

10) 在第8列之前删除分页符:
ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;

11) 指定边框线宽度:
ExcelApp.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )

12) 清除第一行第四列单元格公式:
ExcelApp.ActiveSheet.Cells[1,4].ClearContents;

13) 设置第一行字体属性:
ExcelApp.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;
查找:
VStartRowIndex := FExcel.ActiveSheet.Cells.Find(What:=widestring('[&Tag&]'), LookIn:=$FFFFEFE5).Row;
14) 进行页面设置:

a.页眉:
ExcelApp.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelApp.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApp.ActiveSheet.PageSetup.FooterMargin := 3/0.035;
e.顶边距2cm:
ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;

15) 拷贝操作:

a.拷贝整个工作表:
ExcelApp.ActiveSheet.Used.Range.Copy;
b.拷贝指定区域:
ExcelApp.ActiveSheet.Range[ 'A1:E2' ].Copy;
c.从A1位置开始粘贴:
ExcelApp.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
d.从文件尾部开始粘贴:
ExcelApp.ActiveSheet.Range.PasteSpecial;

16) 插入一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Insert;
b. ExcelApp.ActiveSheet.Columns[1].Insert;

17) 删除一行或一列:
a. ExcelApp.ActiveSheet.Rows[2].Delete;
b. ExcelApp.ActiveSheet.Columns[1].Delete;

18) 打印预览工作表:
ExcelApp.ActiveSheet.PrintPreview;

19) 打印输出工作表:
ExcelApp.ActiveSheet.PrintOut;

20) 工作表保存:
if not ExcelApp.ActiveWorkBook.Saved then
ExcelApp.ActiveSheet.PrintPreview;

21) 工作表另存为:
ExcelApp.SaveAs( 'C:\Excel\Demo1.xls' );

22) 放弃存盘:
ExcelApp.ActiveWorkBook.Saved := True;

23) 关闭工作簿:
ExcelApp.WorkBooks.Close;

24) 退出 Excel:
ExcelApp.Quit;

补充:
设置打印方向:BExcelApp.ActiveSheet.PageSetup.Orientation := 2;
1:纵向,2横向

设置单元格边框:FExcel.Selection.Borders[2].LineStyle := 0;
值:0-有,1-无。位置:1-左, 2-右,3-上,4-下,5-中竖,6中横
设置纸张大小:还有问题
VExcelApp.ActiveSheet.PageSetup.PaperSize := 12; //9--A4,8--A3,12--B4,13--B5

VExcelApp.Selection.HorizontalAlignment := '3';//xlCenter 1--常规、2--靠左、3--居中、4--靠右

VExcelApp.Selection.VerticalAlignment := '1';

修改列类型:FExcel.Columns[8].NumberFormatLocal := '@';//"@"字符型,"yyyy-mm-dd"日期型,"h:mm:ss"时间型,"0.00%"百分数,"G/通用格式"常规类型,
"0.00_ ;[红色]-0.00 "数值型,"¥#,##0.00;[红色]¥-#,##0.00"货币型,"# ?/?"分数。
自动换行: FExcel.Selection.WrapText := True;
设置字体
FExcel.Cells.Select;
FExcel.Selection.Font.Size := AFont.Size;
FExcel.Selection.Font.Name := AFont.Name;
设置列宽:
FExcel.Columns[AColumnNo].ColumnWidth := AColumnWith;

设置页眉:
1: FExcel.ActiveSheet.PageSetup.LeftHeader := APageHander;
2: FExcel.ActiveSheet.PageSetup.CenterHeader := APageHander;
3: FExcel.ActiveSheet.PageSetup.RightHeader := APageHander;
设置页脚:
1: FExcel.ActiveSheet.PageSetup.LeftFooter := APageFooter;
2: FExcel.ActiveSheet.PageSetup.CenterFooter := APageFooter;
3: FExcel.ActiveSheet.PageSetup.RightFooter := APageFooter;

遍历分页符:
for VIndex := 1 to FExcel.ActiveSheet.HPageBreaks.Count do
if FExcel.ActiveSheet.HPageBreaks.Item[VIndex].Location.Row = ARow + 1 then
begin
SetPageFlooter('工时小计:' + IntToStr(ASubTotal), 1);
ASubTotal := 0;
Result := True;
Exit;
end;

设置打印某几页:
ActiveWindow.SelectedSheets.PrintOut From:=Flag, To:=Flag, Copies:=1, Collate :=True

设置密码保护:
FExcel.ActiveWorkBook.Protect('1234',True,True);
FExcel.ActiveSheet.Protect('1234',True,True,True);
替换:
全部替换
VWrapPageExcel.ActiveCell.Replace('[&page&]','共' + IntToStr(APageCount) + '页',2,1,False,False,False,False);
替换选中
VWrapPageExcel.Cell.Replace('[&page&]'****** + IntToStr(APageCount) + '页',2,1,False,False,False,False);

(二) 使用Delphi 控件方法
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。

1) 打开Excel
ExcelApplication1.Connect;

2) 显示当前窗口:
ExcelApplication1.Visible[0]:=True;

3) 更改 Excel 标题栏:
ExcelApplication1.Caption := '应用程序调用 Microsoft Excel';

4) 添加新工作簿:
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(EmptyParam,0));

5) 添加新工作表:
var Temp_Worksheet: _WorkSheet;
begin
Temp_Worksheet:=ExcelWorkbook1.
WorkSheets.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam,0) as _WorkSheet;
ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
End;

6) 打开已存在的工作簿:
ExcelApplication1.Workbooks.Open (c:\a.xls
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,0)

7) 设置第2个工作表为活动工作表:
ExcelApplication1.WorkSheets[2].Activate; 或
ExcelApplication1.WorksSheets[ 'Sheet2' ].Activate;

8) 给单元格赋值:
ExcelApplication1.Cells[1,4].Value := '第一行第四列';

9) 设置指定列的宽度(单位:字符个数),以第一列为例:
ExcelApplication1.ActiveSheet.Columns[1].ColumnsWidth := 5;

10) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
ExcelApplication1.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

11) 在第8行之前插入分页符:
ExcelApplication1.WorkSheets[1].Rows.PageBreak := 1;

12) 在第8列之前删除分页符:
ExcelApplication1.ActiveSheet.Columns[4].PageBreak := 0;

13) 指定边框线宽度:
ExcelApplication1.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
1-左 2-右 3-顶 4-底 5-斜( \ ) 6-斜( / )

14) 清除第一行第四列单元格公式:
ExcelApplication1.ActiveSheet.Cells[1,4].ClearContents;

15) 设置第一行字体属性:
ExcelApplication1.ActiveSheet.Rows[1].Font.Name := '隶书';
ExcelApplication1.ActiveSheet.Rows[1].Font.Color := clBlue;
ExcelApplication1.ActiveSheet.Rows[1].Font.Bold := True;
ExcelApplication1.ActiveSheet.Rows[1].Font.UnderLine := True;

16) 进行页面设置:
a.页眉:
ExcelApplication1.ActiveSheet.PageSetup.CenterHeader := '报表演示';
b.页脚:
ExcelApplication1.ActiveSheet.PageSetup.CenterFooter := '第&P页';
c.页眉到顶端边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
d.页脚到底端边距3cm:
ExcelApplication1.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
e.顶边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.TopMargin := 2/0.035;
f.底边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
g.左边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
h.右边距2cm:
ExcelApplication1.ActiveSheet.PageSetup.RightMargin := 2/0.035;
i.页面水平居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
j.页面垂直居中:
ExcelApplication1.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
k.打印单元格网线:
ExcelApplication1.ActiveSheet.PageSetup.PrintGridLines := True;

17) 拷贝操作:

a.拷贝整个工作表:
ExcelApplication1.ActiveSheet.Used.Range.Copy;

b.拷贝指定区域:
ExcelApplication1.ActiveSheet.Range[ 'A1:E2' ].Copy;

c.从A1位置开始粘贴:
ExcelApplication1.ActiveSheet.Range.[ 'A1' ].PasteSpecial;

d.从文件尾部开始粘贴:
ExcelApplication1.ActiveSheet.Range.PasteSpecial;

18) 插入一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Insert;
b. ExcelApplication1.ActiveSheet.Columns[1].Insert;

19) 删除一行或一列:
a. ExcelApplication1.ActiveSheet.Rows[2].Delete;
b. ExcelApplication1.ActiveSheet.Columns[1].Delete;

20) 打印预览工作表:
ExcelApplication1.ActiveSheet.PrintPreview;

21) 打印输出工作表:
ExcelApplication1.ActiveSheet.PrintOut;

22) 工作表保存:
if not ExcelApplication1.ActiveWorkBook.Saved then
ExcelApplication1.ActiveSheet.PrintPreview;

23) 工作表另存为:
ExcelApplication1.SaveAs( 'C:\Excel\Demo1.xls' );

24) 放弃存盘:
ExcelApplication1.ActiveWorkBook.Saved := True;

25) 关闭工作簿:
ExcelApplication1.WorkBooks.Close;

26) 退出 Excel:
ExcelApplication1.Quit;
ExcelApplication1.Disconnect;

(三) 使用Delphi 控制Excle二维图
在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet
var asheet1,achart, range:variant;

1)选择当第一个工作薄第一个工作表
asheet1:=ExcelApplication1.Workbooks[1].Worksheets[1];

2)增加一个二维图
achart:=asheet1.chartobjects.add(100,100,200,200);

3)选择二维图的形态
achart.chart.charttype:=4;

4)给二维图赋值
series:=achart.chart.seriescollection;
range:=sheet1!r2c3:r3c9;
series.add(range,true);

5)加上二维图的标题
achart.Chart.HasTitle:=True;
achart.Chart.ChartTitle.Characters.Text:=’ Excle二维图’

6)改变二维图的标题字体大小
achart.Chart.ChartTitle.Font.size:=6;

7)给二维图加下标说明
achart.Chart.Axes(xlCategory, xlPrimary).HasTitle := True;
achart.Chart.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text := '下标说明';

8)给二维图加左标说明
achart.Chart.Axes(xlValue, xlPrimary).HasTitle := True;
achart.Chart.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text := '左标说明';

9)给二维图加右标说明
achart.Chart.Axes(xlValue, xlSecondary).HasTitle := True;
achart.Chart.Axes(xlValue, xlSecondary).AxisTitle.Characters.Text := '右标说明';

10)改变二维图的显示区大小
achart.Chart.PlotArea.Left := 5;
achart.Chart.PlotArea.Width := 223;
achart.Chart.PlotArea.Height := 108;

11)给二维图坐标轴加上说明
achart.chart.seriescollection[1].NAME:='坐标轴说明';

859 Words • 157 views • 07-07-04 • 14:24:26• 高 玉昆 Email Permalink
Category: 其他
Words • 33 views • 09-09-04 • 13:27:17• 高 玉昆 Email Permalink
Category: 测试
Words • 27 views • 09-09-01 • 11:29:52• 高 玉昆 Email Permalink
淘宝商品排序潜规则
Category: 资料

如果你开的有淘宝店!如果你想把淘宝店做的人气十足,

哪请你读一下吧,决对让你受益非浅!

现在搜索的商品排序有四部分,

先后顺序如下:

1、被设为橱窗推荐位的宝贝

2、虽然是橱窗推荐,但是该商品已经有90天未被人购买了。

3、未被橱窗推荐的一般宝贝

4、一般宝贝中90天未被购买的宝贝如果顾客在淘宝首页里用关键词来搜索宝贝,在所有带关键词的宝贝里是这样显示的,先是显示橱窗推荐的宝贝0-13天后,接下来再显示设置了橱窗推荐,但长期(超过90天)没有售出的宝贝0-13天,然后再显示没有设置为橱窗推荐的所有宝贝0-13天,最后显示所有宝贝里长期没有售出的宝贝0-13天,一共分四挡来显示,然后只显示100页的商品,101页以后的商品是不显示。从这个规则来看,我们得想办法让我们的商品在同类商品的排名中往第1页靠的话,就必须得在商品名称、定时发布和橱窗推荐这些工作上下功夫了。淘宝的默认搜索结果,在首页搜索就是"人气宝贝"的搜索结果,在"我要买"这个频道搜索就是"所有宝贝"的搜索结果,在网页右上角搜索就是"橱窗推荐"的搜索结果,在旺旺上搜索是"所有宝贝"的搜索结果,你可以试试就知道了.
人气宝贝综合卖家诚信、宝贝卖出数、宝贝浏览量等因素来竞排的

* 橱窗位是什么*

淘宝中的买家我们不妨分为两种,一是随机购买,这样的买家和很多女性逛街一样,喜欢在淘宝去转商铺,看到喜欢的DD就淘两件。还有的就是有消费需求的买家,因为想买而上淘宝。针对第一种的买家暂且不说。橱窗位是专门为第二种买家准备的,因为只要买家把他需要的宝贝的名称一输入,所有的宝贝一览无余。宝贝数量多达上百页,而最先看到的一般是马上要下架的宝贝(搜索页是默认时间排序的,也可以按照价格高低排序等),而买家大部分是在前几页去选择宝贝,并找在线的店主接洽。那么我们不妨把橱窗位可以定义为咱们的招牌,是让顾客走进店铺的幌子。为什么钻石卖家卖的比新手要多很多?单单是信誉高的原因吗?我认为橱窗位的因素才是根本的问题。在理论上,一个钻石卖家的橱窗位理论上可以达到数十个(基本橱窗位35个,每周销售额达到一定数额奖励5个,销售量在前50名奖励10个),而新人在开始仅仅是15个或者20个,贫富差距很大。很不公平吗?其实钻石卖家也是从新手的15个橱窗位挺过来的。我更认为即便新人只有 15个橱窗位,只要合理的科学利用,进店铺的买家也会不少的。

* 如何科学利用推荐位(由于是为新手提供参考,暂不介绍淘宝助理的使用。)

*宝贝名称定义要准确:忌名称过于复杂或过于简单,要做到全而不乱,简而不缺,当把宝贝名称写好后,自己先搜索下,看是否容易搜索的到,搜索的难易程度如何,然后及时修正宝贝名称。

*合理安排宝贝上架时间:如果店铺宝贝数量不到3000个的话,建议采用7天一循环的办法,时段设定一要把握所谓黄金时间,一般来说,上午10点以后,下午2 点到5点,晚上8点到10点,在淘宝上的买家相对多些,而在周六、日人相对少些。我们要在浏览量多的时段去安排自己的宝贝上架。还有也要根据自己的作息时间来确定,比如兼职的,那要在单位不忙的时候,晚上在家的时候去安排宝贝上架,周末周日或平时有活动的时候尽量少安排宝贝上架。综合考虑两者因素,确定合理的宝贝上架时间。

*合理把握上架方式:切忌把宝贝一下全部上架,尤其是新手刚开业的时候,一次性的把仓库的宝贝,全部上去,等宝贝下架了再全部放上去,如果是这样的话,那等于你的店铺一周开张一天,休息六天,要是在深夜辛苦上架的话,那就更恐怖了。宝贝上架的主要方式有两种,一是随下随上,还有就是编辑上架,本人一般采用第二种方法,操作方式如下:点击我售中的宝贝—仓库的宝贝—选中宝贝—编辑—设定上架时间—提交。通常我在晚上进行,统一安排第二天的宝贝上架。
*橱窗位和下架时间相结合:橱窗位不是让你展示自己最漂亮的宝贝,而是要把要下架的宝贝放到上面去,基本步骤:点击售中的宝贝—翻到最后一页—选中宝贝—橱窗推荐—直到选满为止。同时注意随时补充调整橱窗位,不要让推荐位空着。(本人曾为写贴跟贴忙了一天,而到晚上才发现,橱窗位居然空了一天,严重本末倒置)。
*有足够的宝贝数量来支持上架和推荐:为了让自己的宝贝总是出现在顾客面前,宝贝的数量不得不考虑,巧妇难做无米之炊,店铺只有区区几十个宝贝,很难保证推荐位的天天时时都满的,理想中的数量,每天上午保证30个宝贝上架,下午50个,晚上40个,一天需要120个宝贝上架,那么一周需要宝贝800个以上,如果真的达到这个程度,15个橱窗位足够去折腾了。宝贝数量少的情况下,那就需要我们精打细算了,仔细去分析自己的宝贝目标客户是谁,他们一般在什么时候出现,在那个时候把宝贝恰当放到橱窗位前几页。

*橱窗位的两种运用方式:见缝插针—把宝贝每隔十分钟或半个小时安排上架和橱窗推荐,让自己的宝贝增加被浏览的机会;兵团作战—每天某几个时段同时出现在前页,让自己的宝贝在顾客面前有个视觉轰炸。具体哪个方式更适合自己,那就需要自己的摸索实践了。

* 几个误区
案例一,本人初进淘宝,把最漂亮的、拿得出手的放到橱窗推荐位上;
案例二,本人曾经在半夜统一把仓库的宝贝统一上架;
案例三,某个妹妹把要下架的宝贝不是放到橱窗位上而是直接下架,又从新上架,周期是14天;
案例四,某淘友自己的橱窗位空着,到论坛去参加社区的有银币奖励的活动…….
* 淘宝的各项规则和制度不是约束我们的,而是为我们服务的,也是被我们利用的,还是那句话:用真心对待顾客,用头脑经营店铺。

* 补充:
1、这里的橱窗位说的不是店铺的推荐,是两个概念。橱窗推荐是为了顾客进你的店铺,而店铺推荐是指的是顾客来了后先能看到的宝贝。
2、相对橱窗推荐位而言,宝贝下架时间的控制更重要。下架时间的控制和时间段的把握,可以使顾客能够最先找到你

1 Words • 26 views • 09-08-19 • 22:43:59• 高 玉昆 Email Permalink
JAVASCRIPT 未结束的字符串常量
Category: .net

今天在做JAVASCRIPT的时候,发现老是出现”未结束的字符串常量”.

自己找了下应该是传参数的时候,有特殊字符引起的.网上也找了下,也有好多出现这种情况.做下总结,以方便以后查阅.

1.JAVASCRIPT引用时,使用的字符语言不一致.
比如:<script type=”text/javascript” src=”xxx.js” charset=”UTF-8”>.xxx.js文件内部使用的是GB2312的格式,外面调用使用的是UTF-8,所以文件内部部分特殊字符因为格式不一致,出现乱码,造成此原因.

2.JAVASCRIPT输出HTML字符时,前后标记不匹配.
这种比较常见,往往在输出字符串时,出现单引号(’)或双引号(”)不配对,或者是在document.write()的时候,没有正确输出单引号(’)或双引号(”)

3.参数内出现HTML标记语言或包含换行符
我今天所遇到的是这种情况.因为我所得到的数据以参数形式传给一函数,结果该数据里包含换行符,造成了此错误.
如:一般测试时只使用单行的数据,是正常的,未出现这个错误,.
当测试时使用多行数据,并使用回车链换行,就出行了此错误.因为里面包含了换行符

对于第3种情况,我的解决方法是:不直接将该数据以参数形式传递,而是先将其赋值在一个隐藏的文本内,需要调用的函数里只需读取该文本里的内容即可.

22 Words • 29 views • 09-08-18 • 14:54:37• 高 玉昆 Email Permalink

:: Next Page >>

高玉昆

| Next >

September 2010
Mon Tue Wed Thu Fri Sat Sun
<< <     
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      

Search

Categories

Linkblog

公益网站

Misc

Syndicate this blog XML

What is RSS?

Who's Online?

Guest Users: 12

powered by
b2evolution