首页 > Office专区 > Excel教程 >

LinGo与Excel文件进行数据读取与写入实例

来源:互联网 2023-02-20 18:18:00 132

LINGO与Excel文件之间的数据传递的两种方法,分别是:LINGO通过@OLE函数实现与Excel文件传递数据,使用@OLE函数既可以从Excel文件中导入数据,也能把计算结果写入Excel文件。Jv9办公区 - 实用经验教程分享!

1.从Excel文件中导入数据Jv9办公区 - 实用经验教程分享!

@OLE函数只能用在模型的集合定义段、数据段和初始段.使用格式可以分成以下几种类型:Jv9办公区 - 实用经验教程分享!

(1)变量名1,变量名2=@OLE('文件名’,’数据块名称1',’数据块名称2’);从指定的Excel文件读取数据,文件名可以包括扩展名(.XLS),还可以包含完整的路径目录名称,如果没有指定路径,则默认路径是LINGO的当前工作目录.该文件中定义了两个数据块,其中的数据分别用来对变量1和变量2初始化.如果变量名是属性,则对应数据块应该是文本格式表示的集合成员名,如果变量名是集合的属性,则对应数据块应该是一系列数字,并且,若变量是初始集合的属性,则对应的数据块应当是一列数据,若变量是二维衍生集合的属性,则对应数据块应当是二维矩形数据区域.@OLE函数无法读取三维数据区域。Jv9办公区 - 实用经验教程分享!

(2)变量名1,变量名2=@OLE(’文件名’,’数据块名称’);左边的两个变量必须定义在同一个集合中,@OLE的参数仅指定一个数据块名称,该数据块应当包含类型相同的两列数据,第一列赋值给变量1,第二列赋值给变量2.Jv9办公区 - 实用经验教程分享!

(3)变量名1,变量名2=@OLE(’文件名’);没有指定数据块名称,默认使用Excel文件中与变量名同名的数据块。Jv9办公区 - 实用经验教程分享!

2.将计算结果导出到Excel文件中使用@OLE函数能把计算结果写入Excel文件,使用格式也有以下三种:Jv9办公区 - 实用经验教程分享!

(1)@OLE(‘文件名’,’数据块名称1’,’数据块名称2’)=变量名1,变量名2;将两个变量的内容分别写入指定文件的两个预先已经定义了名称的数据块,数据块的长度(大小)不应小于变量所包含的数据,如果数据块原来有数据,则@OLE写入语句运行后原来的数据将被新的数据覆盖。Jv9办公区 - 实用经验教程分享!

(2)@OLE(‘文件名’,’数据块名称’)=变量名1,变量名2;两个变量的数据写人同一数据块(不止1列),先写变量1,变量2写入另外1列.Jv9办公区 - 实用经验教程分享!

(3)@OLE(‘文件名’)=变量名1,变量名2;不指定数据块的名称,默认使用Excel文件中与变量名同名的数据块.Jv9办公区 - 实用经验教程分享!

下面举例说明函数@OLE的用法,使用软件为Lingo17和Excel2016。Jv9办公区 - 实用经验教程分享!

LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

工具/原料

  • Lingo17
  • EXCEL2016

方法/步骤

  • 1

    [例1]某化工集团公司有6 个化工厂,每个化工厂的位置(用平面坐标a, b 表示,距离单位为km)及化工原料日用量m t 由表给出. 目前有两个炼油厂位于A(5, 1),B(2, 7),日产化工原料量各有20t. 假设从炼油厂到化工厂之间均有直线道路相连.试制订每天的供应计划,即从A, B 两个炼油厂分别向各化工厂运送多少吨化工原料,使总的运力(吨千米数)最小.Jv9办公区 - 实用经验教程分享!

    表1 化工厂位置及日用量Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

  • 2

    1.问题分析 每天两个炼油厂给6 个化工厂各提供多少原料,共需12 个决策变量. 需要满足两方面的约束,一方面要满足各化工厂的需求,另一方面受到炼油厂产量限制. 目标是总运力最小. 计算总运力用到直线距离,所以目标函数不是线性函数,应该建立非线性规划模型.Jv9办公区 - 实用经验教程分享!

    模型建立Jv9办公区 - 实用经验教程分享!

    设化工厂的位置为(ai ,bi ),水泥日用量为mi,i 为1,2,......6;炼油厂位置为(xj , y j ) ,日储量为nj,j =1,2;从炼油厂j向化工厂i的运送量为Xij .Jv9办公区 - 实用经验教程分享!

    目标函数为:Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

  • 3

    2.在lingo17编辑器中输入程序源代码:Jv9办公区 - 实用经验教程分享!

    model:Jv9办公区 - 实用经验教程分享!

    sets:Jv9办公区 - 实用经验教程分享!

    CP:gx,gy,m;Jv9办公区 - 实用经验教程分享!

    Refinery:n,x,y;Jv9办公区 - 实用经验教程分享!

    c(Refinery,CP):share;Jv9办公区 - 实用经验教程分享!

    endsetsJv9办公区 - 实用经验教程分享!

    min=@sum(Refinery(i):Jv9办公区 - 实用经验教程分享!

    @sum(CP(j):((x(i)-gx(j))^2 (y(i)-gy(j))^2)^0.5*share(i,j)));Jv9办公区 - 实用经验教程分享!

    @for(CP(j):@sum(Refinery(i):share(i,j))=m(j));Jv9办公区 - 实用经验教程分享!

    @for(Refinery(i):@sum(CP(j):share(i,j))n(i));Jv9办公区 - 实用经验教程分享!

    data:gx,gy,m,x,y,n=@ole('d:\data.xls','gx','gy','m','x','y','n');Jv9办公区 - 实用经验教程分享!

    @ole('d:\data.xls','share')=share;Jv9办公区 - 实用经验教程分享!

    enddataJv9办公区 - 实用经验教程分享!

    endJv9办公区 - 实用经验教程分享!

    Jv9办公区 - 实用经验教程分享!

    Jv9办公区 - 实用经验教程分享!

    如图所示:Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

  • 4

    4.本例可建立Excel 工作表,文件位置为:d:\data.xls, 打开Excel 2016,在A1:J6,输入数据,请自行根据题意,体会如此输入数据的含义,如图所示:Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

  • 4此文章非法爬取自百度经验
  • 5

    5.点击"公式"菜单,选择"定义名称"选项,定义好相应数据域,请自行体会根据程序中以及图表中的变量名称含义与相应数据域名称相关联,将程序变量名称定义的数据域名称已显示在data.xls表中,在程序代码:gx,gy,m,x,y,n=@ole('d:\data.xls','gx','gy','m','x','y','n')中,注意由于excel自行默认赋予属性,所以属性Refinery,CP可以默认不定义,只有六个相应变量名,分别为:'gx','gy','m','x','y','n',其相应变量定义的数据区域名称:'gx':Sheet1!$B$2:$G$2,'gy':Sheet1!$B$3:$G$3,'m':Sheet1!$B$4:$G$4,'n':Sheet1!$H$5:$H$6,'x':Sheet1!$I$5:$I$6,''y':Sheet1!$J$5:$J$6,另外'share'变量名,为需要输出的结果数据区域变量名,'share':=Sheet1!$B$5:$G$6,如图所示:Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

  • 6

    5.请注意在准备运行Lingo程序前,不要关闭Excel的data.xls文件,注意如果是高版的excel文件,data的扩展名可能为xlsx,点击"Debug"菜单,选择"Run"子菜单项,就可以得到此题的运行结果,如图所示:Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

  • 7

    6.此时,我们可以从Excel表格,得到本题的答案,如图所示:Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

  • 8

    7.从Excel表格,我们可以得到本题的答案为:即从A, B 两个炼油厂分别向各化工厂运送多少吨化工原料,使总的运力(吨千米数)最小.最小运力为 140.5404,如图所示:Jv9办公区 - 实用经验教程分享!

    LinGo与Excel文件进行数据读取与写入实例Jv9办公区 - 实用经验教程分享!

  • 9

    8.如果大家觉得不错的话,喜欢就请点个赞,分享给你身边的朋友吧,我将发布更多的教程,Excel不同的版本可能细节上有些细微区别,请自行留意注意区别。Jv9办公区 - 实用经验教程分享!

  • 注意事项

    • 请注意在准备运行Lingo程序前,不要关闭Excel的data.xls文件
    • 有些高版本的Excel保存的文件的扩展名为.xlsx,请保持程序中相应文件扩展名一致
    • 此Lingo程序用到了集合属性概念,请根据题意及相应表格中的数据含义,认真体会程序代码的含义

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!Jv9办公区 - 实用经验教程分享!


    标签: excel文件数据实例

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码