应用场景是Excel某N列数据想用Vim处理后再复制回Excel。

Vim提供了ole接口供其他语言调用,详见:h ole.txt。

  一、Excel内容转到Vim新缓冲区

首先获取Excel选中区域的内容

rng := ComObjActive("Excel.application").selection

  下面是两个函数:

  1. 激活Vim并保证当前是新缓冲区
  2. 把Excel的arrV写到Vim新缓冲区
GVim_newBuffer() ;打开新缓冲区
{if ProcessExist("gvim.exe"){WinShow("ahk_class Vim")WinActivate("ahk_class Vim")oVim := ComObjActive("Vim.application")if oVim.eval('strlen(join(getline(1,"$"),"\r\n"))') ;如果是两个空行也认为不是空缓冲区oVim.eval('execute("$tabnew")')}elserun("d:\soft\Vim\gvim.exe") ;替换成自己的gvim.exe路径
};arrV可以是字符串
GVim_setBuffer(arrV)
{oVim := ComObjActive("Vim.application")if IsObject(arrV){loop(arrV.MaxIndex(1)){r := A_IndexsRow := ""loop(arrV.MaxIndex(2))sRow .= arrV[r,A_Index].delete0() . A_TaboVim.eval(format('setline({1},iconv("{2}","cp936","utf-8"))',r,RTrim(sRow,A_Tab)))}}else ;字符串oVim.eval(format('setline(1,iconv("{1}","cp936","utf-8"))',arrV))  oVim.SendKeys('gg') ;顺便刷新Vim
}

  然后整体的调用代码:

rng := ComObjActive("Excel.application").selection
GVim_newBuffer()
if (rng.cells.count = 1)GVim_setBuffer(rng.value)
elseGVim_setBuffer(rng.value)
WinActivate("ahk_class Vim")

二、从Vim缓冲区内容转到Excel

用如下命令就能获取Vim当前缓冲区的内容(字符串格式),需要用iconv来转换编码供ahk使用。

oVim := ComObjActive("Vim.application")
rs := oVim.eval('line("$")') ;行数
str := oVim.eval('iconv(join(getline(1,"$"),"\r\n"),"utf-8","cp936")')

对str的第一行内容用tab分割就知道有几列数据了(如果后面列数比第1行多就会报错了,可以多设置列数)

loop parse, str, "`n", "`r"
{cs := StrSplit(A_LoopField, A_Tab).length()break
}

  然后就可以用ComObjArray把字符串转成数组,再写入Excel的selection即可

arrA := ComObjArray(12, rs, cs)
loop parse, str, "`n", "`r"
{r := A_Index-1for k, v in StrSplit(A_LoopField, A_Tab)arrA[r,k-1] := v
}ComObjActive("Excel.application").selection.cells(1).value := arrA

 

这是今天刚出炉写的代码,希望能帮到大家,谢谢。转载请注明出处

转载于:https://www.cnblogs.com/hyaray/p/11318715.html

利用AutoHotkey实现Vim和Excel的数据传递相关推荐

  1. python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...

    接上篇文章<如何用python实现excel中的vlookup功能?>,上篇说到,最近我在做一个小项目,也是用python操作excel解决财务审计工作上的一些问题,以便提高工作效率及其准 ...

  2. lisp用entmake生产圆柱体_CAD与Excel之间数据传递的思路 1

    CAD中图文信息比较直观,但基本不具备数据统计功能.Excel数据统计方便,但往往不能直观地表达信息.所以通常的做法是在CAD图纸中附上Excel表格信息. 这种方法最大的弊端在于:如果CAD图上(或 ...

  3. python导入excel表格-Python 将Excel表格数据导入MySQL数据库

    今天分享一个刚刚完成的Python脚本,一个实用的小技能,就是利用Python代码,将EXCEL表格数据导入到MySQL数据库中!话不多说,下面代码示例. Excel表格数据.jpg 1示例代码: i ...

  4. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc

    利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...

  5. 利用PHP-ExcelReader实现PHP导入Excel数据[不通过CSV]

    最近因项目需求,要实现将excel文件通过php页面导入mysql数据库中.在网上搜了很多这方面的资料,发现都是将excel文件另存为csv文件,然后从csv文件导入.这里介绍一个直接将excel文件 ...

  6. 怎么利用计算机公式计算完成比例,excel表格数据计算所占比例公式的使用教程...

    Excel中经常需要使用到公式计算所占比例,所占比例具体该如何利用函数进行计算呢?接下来是学习啦小编为大家带来的excel表格数据计算所占比例公式的使用教程,供大家参考. excel表格数据计算所占比 ...

  7. python怎么筛选excel数据_python筛选数据excel表格-如何利用python提取两个excel对比后的重复值的信息?...

    怎么用python读取excel表格的数据 import xlrd #open the .xls file xlsname="test.xls" book = xlrd.open_ ...

  8. java横向导出excel_利用Java进行Excel的数据导入导出

    1. 引言 MS 的电子表格(Excel)是Office 的重要成员,是保存统计数据的一种常用格式.在一 个Java 应用中,将一部分数据生成Excel 格式,是与其他系统无缝连接的重要手段.在远程 ...

  9. 利用百度地图api将excel中的经纬度数据可视化

    利用百度地图api将excel中的经纬度数据可视化 因为本人最近在研究2019年研究生数学建模华为杯D题,想将它3个excel文件汽车的经纬度数据在地图上画出来,找了很多方法才实现.现将它分享给大家, ...

最新文章

  1. 《LeetCode力扣练习》第11题 C语言版 (做出来就行,别问我效率。。。。)
  2. java mybatis enum_mybatis处理枚举类的简单方法
  3. 如何解决ORA-00054资源正忙,要求指定NOWAIT?
  4. 超图iServer重置管理员密码图解
  5. Android SDK下载失败-Android SDK Manager国内无法更新的解决方案
  6. 《高性能JavaScript》第四章 算法和流程控制
  7. vue里面rules_vue如何使用rules对表单字段进行校验
  8. oracle大黑点,R语言实现交通行业事故案例之黑点确定 - 数据分析
  9. [转]纯JS实现出生日期[年月日]下拉菜单
  10. [转载].NET开发常用的10条实用代码
  11. VAssistX给注释中文带来红色下划线可以去掉
  12. 1048: 谭浩强C语言(第三版)习题6.4
  13. 基于SSM的企业人事管理系统(Spring+SpringMVC+Mybatis)
  14. 思科vrrp实例_VRRP配置及多备份VRRP配置实例
  15. 如何写出优雅的React代码Clean Code vs. Dirty Code
  16. 按键精灵抓取不到的问题
  17. 揭秘 Longhorn 如何为 3.5万 个 Kubernetes 节点提供持久存储?
  18. 如何用几何画板中绘制三角形内切圆
  19. Java SpringMVC毕业项目实战-学生信息管理系统
  20. 【线程池封装】实现简单回射服务器

热门文章

  1. freemarker生成word模板
  2. 新疆大学OJ(ACM) 1099: 数列有序!
  3. html 悬浮阴影,css实现悬浮效果的阴影的方法示例
  4. keepalived(8)——http、tcp检测
  5. Hbase(2)——基础语句(2)
  6. 将 app 打包成 deb 发布安装
  7. Delphi程序自删除
  8. Ubantu16.04安装显卡驱动遇到的坑
  9. const_cast的使用:添加或去掉const、常量折叠
  10. html如何控制弹窗位置,控制弹窗展示顺序