设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1809|回复: 2
打印 上一主题 下一主题

[与其它组件] 色空间、极坐标以及那些ChatGPT无法解决的问题——保存Excel对象为图片

[复制链接]
跳转到指定楼层
1#
发表于 2023-5-8 05:28:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先说需求:输入任意一组指定范围的数X、Y(以下称为“像素点”),例如,像素点为(30,-100),要求它落在这个彩色圆(这个又叫色空间,以下称为“色空间”)的内部;再输入像素点为(-50,60),要求它也落在色空间内部,应该怎么做?

答:将直角坐标系下,像素点的值转为极坐标系所对应的值。这样一来,极径就等于sqrt(power(X,2)+power(Y,2)),任意像素点都会落在色空间内部。直角坐标系只需要设置为一个单位圆即可。

这是一个朋友向我提出的问题,思路只是初步。因为还有更麻烦的事情:怎么在窗体上把它呈现出来。
当时有两三种方法。
1、将像素点转为图像对象,添加到色空间图片上,合成图片后输出。这个方法Python很容易处理,但VBA很麻烦,需要声明一大堆win32 API函数。
2、使用第三方插件,例如echarts,在极坐标上绘制散点图。这个在技术上很容易实现。问题是,怎么保证这些点落在色空间里面?那就得调整echarts图表的坐标轴与色空间的一致对齐。而这需要调整的时间就很长了。重点时,echarts坐标轴并不方便平移(对,是平移,不是插队)。
3、在Access中绘制散点图,再设置背景图为色空间图,进行叠合。最后同样遇到方法2的问题,没法对齐。因为当删除坐标刻度、图表标题之类时,坐标轴会自动王左上角移动。
4、在Excel里叠加。设置图表背景透明后,很容易实现。接下来只剩一个问题:怎么把叠合后的图片更新到窗体上。

这个问题,从下午开始问到晚上,chatGPT始终没答对。这个就是chatGPT的局限性了:如果网上有很多例子,它可以回答得很准,而资料较少时就难免搜不到,那只好一本正经地胡说八道了。
比如,它提供的代码里始终用shape.export来导出图片。而事实上,这个方法仅限于单个图表(chart),其它类型。比如与图片组合的图表,或者图片,都没有这个方法。

我是找到了站长的大作(http://www.office-cn.net/article-15042-1.html),抄过来,然后稍稍改一下才解决的。是的,不能直接export,需要设置图片的文件头之类。
(感谢TVB,感谢Parco,感谢站长,还有众多支持我的粉丝
产品如下所示(请留意右下角的小白点):


——2023-5-8 13:22 更新:应朋友要求,添加了保护工作表
这里科普一下保护工作表的做法(会操作的请直接下拉页面到附件位置):
先全选所有单元格,解除锁定:

再选择需要保护的单元格,进行锁定:

最后设置解锁密码:

——2023-5-9 15:26 更新:应朋友要求,添加L值,按LAB计算

--------------------------------我是分割线--------------------------------

朋友说,应该加上Excel错误处理,避免打开一个文件多次出现弹窗。
其实这个问题我也考虑过,一般用GetObject和CreateObject来查找是否打开了Excel。如果打开了急用GetObject,如果没打开就用CreateObject。示例代码如下:
  1. Dim exl As Excel.Application
  2. Dim wb As Excel.Workbook

  3. On Error Resume Next '忽略错误

  4. Set exl = GetObject(, "Excel.Application") '查找一个正在运行的 Excel 拷贝

  5. If Err.Number <> 0 Then '如果 Excel 没有运行则
  6.     MsgBox Err.Description
  7.     Set exl = CreateObject("Excel.Application") '运行它
  8. End If
  9. Err.Clear ' 清除发生错误的 Err 对象


  10. Set wb = exl.Workbooks.Open(strExcelFileName)
  11. 以下从略……
复制代码

但问题是,处理完数据后,是否需要退出Excel程序?如果用户正好打开了一个别的Excel文件,退出程序,可能会影响她/他的工作(比如文件还没保存)。如果不退出,那么还是会驻留在线程里,这和代码报错后没法退出Excel进程没什么区别。


顺带问一下,大家一般是怎么处理的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享1 分享淘帖 订阅订阅
2#
发表于 2023-5-8 08:21:47 | 只看该作者
感谢分享,学习学习,
3#
发表于 2024-5-3 22:12:48 来自手机 | 只看该作者
谢谢分享!
回复

使用道具 举报

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

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 08:23 , Processed in 0.100698 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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