Excel是财务工作的常用工具,但是对于复杂的函数操作,对于一些不熟悉计算机编程知识的财务人员是一件比较头疼的事情。笔者结合C语言对Excel文件的OLE操作函数,开发出的应用程序简单易用,解决了财务核价工作面临的这一难题。
核价的目的
核价没有规律与理论的依据,是一个很活的东西。但是也是有一定的依靠的。它分为前核算与后核算。前核算主要是针对产品的前期情况作出一个大致的估计与预算,这并不是一味盲目性的估计,而是要对产品有一定的了解或是在此行业中熟悉的人才可作其工作。前核算是研究产品的各类信息以便报给客人正确的价位,当然也可以让核价方的利益损耗一目了然。后核算是产品出货后,在前核算的基础上对照产品的各种材料成本包括工人工资在内的细节全面系统的进行一个大结算。后核算将能看出真正的利益与否。
核价的过程
核价的过程一般是将已有工作表的物品价格清单中的价格,与另一工作表的物品清单中的物品名称核对,再将对应的价格导入到另一工作表。如图1所示,
物品名称 单价(元)
铅笔 2
橡皮 1.5
纸 10
墨水 6
中性笔 2.5
物品名称 单价(元)
橡皮
纸
中性笔
胶水
已有工作表(工作表1)
另一工作表(工作表2)
物品名称 单价(元)
橡皮 1.5
纸 10
中性笔 2.5
胶水
核价后的工作表
图1 核价过程
算法:
本程序的算法为穷举算法,即将工作表2中的物品名称与工作表1中的物品名称匹配,匹配成功的就将工作表1中的物品单价复制到工作表2的物品单价项,以达到核价的目的。
算法如下:
For(i=0;i
{
For(j=0;j
{
If(表1中当前物品名称的值==表2中当前物品名称的值)
{
表2中当前记录单价=表1中当前记录单价的值;
表2当前记录=表2当前记录->next;
}
Else
表2当前记录=表2当前记录->next;
}
表1当前记录=表1当前记录->next;
}
实现方法
OLE(对象的链接与嵌入)是微软于20世纪90年代初提出并大力推广和不断发展的技术,是应用程序间交换数据、相互操作的一种有效方式,微软的Office产品提供了很强的OLE服务功能,Visual Basic、Delphi及C++Builder等语言都可以客户方式向Excel提交命令,以存取其中的数据,其中Visual Basic和Delphi在操作上最为简单,在语法上采用类VBA的语句;而C++Builder则采用间接的方法,利用变体类Variant所提供的方法向OLE服务程序提交操纵命令。
在C++Builder中,使用OLE方式操作Excel表通常包括以下过程:创建应用程序对象;创建工作薄对象;创建工作表对象;打开当前工作表;操作工作表(如设置单元格值,获取单元格值,设置单元格字体,设置单元格格式,重命名工作表,设置列宽,设置行高及插入删除等操作);保存工作薄;退出工作薄;退出Excel程序。以下是本核价程序通过OLE方式从Excel文件导入数据的主要代码。
…
//从Excel表获取数据
for(int i=1;i
{
for(int j=1;j
{
AnsiString Str;
Str=WorkSheet1.OlePropertyGet("Cells",i,j).OlePropertyGet("Value");
this->StringGrid1->Cells[j-1][i-1]=Str;
}
}
用以上方式将表1和表2导入到程序中,进行核价,核价过程的具体实现代码如下:for(int n=1;nStringGrid2->RowCount;n++)
{
for(int m=1;mStringGrid1->RowCount;m++)
{ if(Form1->StringGrid1->Cells[0][m-1]==Form1->StringGrid2->Cells[0][n-1])
Form1->StringGrid2->Cells[1][n-1]=Form1->StringGrid1->Cells[1][m-1];
}
}
核价结束后再将结果保存到Export.xls文件中。保存方法如下:
…
//给Excel表赋值
for(int i=1;iStringGrid2->RowCount;i++)
{
for(int j=1;jStringGrid2->ColCount;j++)
{
AnsiString StrValue=Form1->StringGrid2->Cells[j-1][i-1];
WorkSheet3.OlePropertyGet("Cells",i,j).OlePropertySet("Value",StrValue.c_str());
}
}
结语
基于C语言的Excel核价程序,利用应用程序效率高、错误率小的优点,构建了简单实用的核价解决方案。经实践应用,使繁冗的核价过程简化为几个按键的操作。大大提高了工作效率和减少了错误率。该程序是财务办公自动化的一次有意义的技术改进