请选择 进入手机版 | 继续访问电脑版

唐康林NX二次开发论坛

 找回密码
 立即注册
搜索
热搜: nxopen ufun
查看: 207|回复: 3

[技术分享] NX11.0二次开发新增Spreadsheet相关类的用法!

[复制链接]

416

主题

527

帖子

2078

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2078
发表于 2016-9-8 16:06:00 | 显示全部楼层 |阅读模式
在 NX11中,新增了与电子表格操作的类;
Spreadsheet
SpreadsheetCellData
SpreadsheetExternal
SpreadsheetManager
对应的头文件为:  
  1. #include <NXOpen/Spreadsheet.hxx>
  2. #include <NXOpen/SpreadsheetCellData.hxx>
  3. #include <NXOpen/SpreadsheetExternal.hxx>
  4. #include <NXOpen/SpreadsheetManager.hxx>
复制代码
利用这些类,可以操作内部与外部的电子表格。
我写了一个例子:
1、新建电子表格;
2、然后写入不同的数据;
3、再读取相关内容,打印在信息窗口;
注:个人感觉NX11虽然增加了这些类,但读取的效率比较低下,还没有用UFUN调KF的方法来读写电子表格效率高
  1. void MyClass::do_it()
  2. {
  3.         UF_initialize();
  4.         //创建电子表格
  5.         int createxcel = uc4500("c:\\tkl.xls", 3, 174);
  6.         uc4540(createxcel, 0);

  7.         //打开
  8.         NXOpen::SpreadsheetExternal *openfile=
  9.         theSession->SpreadsheetManager()->OpenFile("c:\\tkl.xls", NXOpen::SpreadsheetManager::OpenModeWrite);
  10.         int worksheet = openfile->GetWorksheetIndex("tkl"); //得到电子表格工作页
  11.         
  12.         //在A1-c1中写入数字        
  13.         std::vector<NXOpen::SpreadsheetCellData *> addata;
  14.         for (size_t i = 0; i < 3; i++)
  15.         {
  16.                 NXOpen::SpreadsheetCellData *celldata = theSession->SpreadsheetManager()->CreateCellData();
  17.                 celldata->SetType(NXOpen::SpreadsheetCellData::TypesInt);
  18.                 celldata->SetIntValue((int)i+1);
  19.                 addata.push_back(celldata);
  20.         }
  21.         openfile->AppendRow(worksheet, addata);
  22.         addata.clear();

  23.         //在A2-D2中写入字符串
  24.         std::ostringstream tempnumberstring;        
  25.         for (size_t i = 0; i < 4; i++)
  26.         {
  27.                 NXOpen::SpreadsheetCellData *celldata = theSession->SpreadsheetManager()->CreateCellData();
  28.                 celldata->SetType(NXOpen::SpreadsheetCellData::TypesString);
  29.                 tempnumberstring << i+1;
  30.                 std::string covertvalue = tempnumberstring.str();
  31.                 celldata->SetStringValue("字符" + covertvalue);
  32.                 addata.push_back(celldata);
  33.                 tempnumberstring.str("");
  34.                 tempnumberstring.clear();
  35.         }
  36.         openfile->AppendRow(worksheet, addata);
  37.         addata.clear();

  38.         //在A3-C3中写入布尔型
  39.         for (size_t i = 0; i < 2; i++)
  40.         {
  41.                 NXOpen::SpreadsheetCellData *celldata = theSession->SpreadsheetManager()->CreateCellData();
  42.                 celldata->SetType(NXOpen::SpreadsheetCellData::TypesLogical);
  43.                 if ((int)i==0)
  44.                 {
  45.                         celldata->SetLogicalValue(true);
  46.                 }
  47.                 else
  48.                 {
  49.                         celldata->SetLogicalValue(false);
  50.                 }
  51.                 addata.push_back(celldata);
  52.         }
  53.         openfile->AppendRow(worksheet, addata);
  54.         addata.clear();
  55.         
  56.         //读取        
  57.         std::vector<NXOpen::SpreadsheetCellData *> thedata;
  58.         openfile->ReadRange(worksheet, -1, -1, -1, -1, thedata); //读取范围,
  59.         //打印基本信息
  60.         theSession->ListingWindow()->Open();
  61.         std::ostringstream tempstring;
  62.         tempstring << "表序号:" << thedata[0]->IntValue() << ",起始行:" << thedata[1]->IntValue() << ",起始列:"
  63.                 << thedata[2]->IntValue() << ",结束行:" << thedata[3]->IntValue() << ",结束列:" << thedata[4]->IntValue();
  64.         std::string covertvalue = tempstring.str();
  65.         theSession->ListingWindow()->WriteFullline(covertvalue);
  66.         tempstring.str("");
  67.         tempstring.clear();

  68.         //打印每个单元格详细信息
  69.         for (size_t i = 5; i < (int)thedata.size(); i++)
  70.         {        
  71.                 NXOpen::SpreadsheetCellData::Types thetype = thedata[i]->Type();
  72.                 if (thetype == SpreadsheetCellData::TypesInt)
  73.                 {
  74.                         tempstring << thedata[i]->IntValue() << ",";
  75.                 }
  76.                 else if (thetype == SpreadsheetCellData::TypesDouble)
  77.                 {
  78.                         tempstring << thedata[i]->DoubleValue() << ",";
  79.                 }
  80.                 else if (thetype == SpreadsheetCellData::TypesString )
  81.                 {
  82.                         tempstring << thedata[i]->StringValue().GetLocaleText() << ",";
  83.                 }
  84.                 else if (thetype == SpreadsheetCellData::TypesLogical)
  85.                 {
  86.                         tempstring << thedata[i]->LogicalValue() << ",";
  87.                 }
  88.                 else
  89.                 {
  90.                         tempstring << thedata[i]->FormulaValue().GetLocaleText() << ",";
  91.                 }

  92.                 if ((i - 4) % (thedata[4]->IntValue() - thedata[2]->IntValue() + 1) == 0)
  93.                 {
  94.                         std::string covertvalue = tempstring.str();
  95.                         theSession->ListingWindow()->WriteFullline(covertvalue);
  96.                         tempstring.str("");
  97.                         tempstring.clear();
  98.                 }               
  99.         }


  100.         //关闭电子表格并保存
  101.         openfile->CloseFile(true);
  102.         
  103.         UF_terminate();
  104. }
复制代码
NX11电子表格操作.gif


回复

使用道具 举报

4

主题

16

帖子

122

积分

终身VIP会员

Rank: 6Rank: 6

积分
122
QQ
发表于 2016-9-10 22:55:56 | 显示全部楼层
就玩11.0了,唐工厉害!
不过我想知道,这个类能不能操作电子表格的图片?例如插入、定位、编辑大小和删除图片等操作。
回复 支持 反对

使用道具 举报

416

主题

527

帖子

2078

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2078
 楼主| 发表于 2016-9-11 16:02:47 | 显示全部楼层
木林 发表于 2016-9-10 22:55
就玩11.0了,唐工厉害!
不过我想知道,这个类能不能操作电子表格的图片?例如插入、定位、编辑大小和删除 ...

我也查了下,貌似没有对应的函数来支持对图片的一些操作。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

29

积分

小学生

Rank: 1

积分
29
发表于 2018-1-9 08:32:21 | 显示全部楼层
感谢分享……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋| ( 蜀ICP备16014681号

GMT+8, 2018-2-20 23:28 , Processed in 0.089248 second(s), 26 queries .

Powered by www.nxopen.cn

© 2001-2013 nxopen.cn

快速回复 返回顶部 返回列表