Dynamo处理Excel——调用Microsoft.Office.Interop.Excel教程

你好,这里是BIM的乐趣,我是九哥~

今天我们来聊聊如何通过Dynamo处理Excel数据以及格式,Dynamo自带的节点肯定是不行,所以我们需要来用Python解决(当然有个节点包

Bumblebee,我在案例百解教程里有过介绍),常用的处理Excel的python模块有很多,如xlrdxlwt,xlutilsopenpyxlXlsxWriter会Python的小伙伴自己去玩了哈,但是Dynamo目前主要是用IronPython(2.10+版本除外),所以我们可选的就没啥了,乖乖用Microsoft.Office.Interop.Excel就好了。

不了解这个的话,可以先关注下官方API网站:

Microsoft.Office.Interop.Excel Namespace | Microsoft Docs

#网址如下:

Microsoft.Office.Interop.Excel Namespace | Microsoft Learn

过多的我感觉也没啥可讲的,我把每行代码是在做什么,在Dynamo中来注释下,方便小伙伴们理解。好了,接下来先演示下基本用法:

一、读取Excel内容:

写个和Dynamo自带节点类似的:

import clr
import sys
import System
from System import Array
from System.Collections.Generic import *#引入Microsoft.Office.Interop.Excel.dll模块
clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
from Microsoft.Office.Interop import Excel
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo("en-US")
from System.Runtime.InteropServices import Marshaldef fun(col_int):#数字转换成Excel列号list1=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']col_str=''if(col_int<=26):col_str=list1[col_int-1]elif(col_int < 702):col_int=col_int-27col_str=list1[int(col_int/26)]+list1[int(col_int%26)]elif(col_int==702):col_str='ZZ'else:col_int=col_int-703col_str=list1[int(col_int/676)]+list1[int(col_int/26)%26]+list1[col_int%26]return(col_str)file = IN[0] 
#打开Excel应用程序
excel = Excel.ApplicationClass()
bool = IN[2] #Excel是否可见
excel.Visible = bool
wb = excel.Workbooks.Open(file)#输入要打开的Excel工作表名称
sheetName = IN[1]
ws = wb.Worksheets[sheetName]
#获取Excel的总行数和列数
totalColumns = ws.UsedRange.Columns.Count
totalRows = ws.UsedRange.Rows.Count
x = (fun(totalColumns))data = []
for i in range(totalRows): x1range = ws.Range("A"+str(i+1),str(x)+str(i+1))   #读取某一行的内容r1 = x1range.Value2data.append(r1)i += 1
OUT = data

二、写入Excel内容

写个和Dynamo自带节点类似的:


import clr
import sys
import System
from System import Array
from System.Collections.Generic import *#引入Microsoft.Office.Interop.Excel.dll模块
clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
from Microsoft.Office.Interop import Excel
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo("en-US")
from System.Runtime.InteropServices import Marshaldef fun(col_int):#数字转换成Excel列号list1=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']col_str=''if(col_int<=26):col_str=list1[col_int-1]elif(col_int < 702):col_int=col_int-27col_str=list1[int(col_int/26)]+list1[int(col_int%26)]elif(col_int==702):col_str='ZZ'else:col_int=col_int-703col_str=list1[int(col_int/676)]+list1[int(col_int/26)%26]+list1[col_int%26]return(col_str)file = IN[0] #文件
sheetName = IN[1] #sheetName
#打开Excel软件
ExcelApp = Excel.ApplicationClass()
ExcelApp.Visible = True #Excel可见
#新建Excel表格
wb = ExcelApp.Workbooks.Add() #新建Excel文件
ws = wb.Worksheets.Add() #新建表格
ws.Name = sheetName #给表格命名
ws = wb.Worksheets[sheetName] #激活该表格,可省略row = IN[2] #行
col = IN[3] #列
data = IN[4]  #数据for d in data:x1 = rowy1 = fun(col)for i in range(len(d)): ws.Range[str(y1)+str(x1)].Value = d[i]#.ToString()  x1 += 1col += 1#保存Excel文件到指定目录
wb.SaveAs(file)
OUT = "数据写入成功"

三、数字转换为Excel列号

这里简单写了一个自定义函数,来把输入的数字转换为Excel的列号,就是一顿数学计算,没啥好解释的,如下:


def fun(col_int):#数字转换成Excel列号list1=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']col_str=''if(col_int<=26):col_str=list1[col_int-1]elif(col_int < 702):col_int=col_int-27col_str=list1[int(col_int/26)]+list1[int(col_int%26)]elif(col_int==702):col_str='ZZ'else:col_int=col_int-703col_str=list1[int(col_int/676)]+list1[int(col_int/26)%26]+list1[col_int%26]return(col_str)

这个存下来吧,通用函数,很方便:


 

四、Excel格式的基本设置

(一)枚举一些基本的Excel格式设置的代码:


#ws为已经打开的Excel表格,以A1格位置为例:
#单个格写入内容
ws.Range["A1"].Value = "门窗表"   
#设置字号
ws.Range["A1"].Font.Size = 15
#设置文字加粗
ws.Range["A1"].Font.Bold = True
#合并单元格,A1到A3合并
ws.Range("A1:C1").MergeCells = True
#自动换行
ws.Range("A1").WrapText =  True
#自动列宽
ws.Range("A1").EntireColumn.AutoFit()
#文字居中
ws.Range("A1").HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
#设置字体为黑体
ws.Range("A1").Font.Name= "黑体"

(二)边框样式设置,API截图如下:

#设置表格边线样式,以黑实线为例:
#wb为当前打开Excel,ActiveSheet为当前激活的表格:
#rng为要设置边框的表格范围
#Excel.XlLineStyle.xlContinuous为实线
#范围的最底部边线
wb.ActiveSheet.Range(rng).Borders.Item(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous
#范围的最左侧边线
wb.ActiveSheet.Range(rng).Borders.Item(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous
#范围的最右侧边线
wb.ActiveSheet.Range(rng).Borders.Item(Excel.XlBordersIndex.xlEdgeRight).LineStyle = Excel.XlLineStyle.xlContinuous
#范围的最顶部边线
wb.ActiveSheet.Range(rng).Borders.Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous
#范围内的水平线
wb.ActiveSheet.Range(rng).Borders.Item(Excel.XlBordersIndex.xlInsideHorizontal).LineStyle = Excel.XlLineStyle.xlContinuous
#范围内的垂直线
wb.ActiveSheet.Range(rng).Borders.Item(Excel.XlBordersIndex.xlInsideVertical).LineStyle = Excel.XlLineStyle.xlContinuous

(三)设置颜色:


#设置填充颜色为淡紫色
ws.Range.Interior.ColorIndex = 39
#Excel字体颜色比较特殊,都是int表示的,需要转换一下,方法如下:
clr.AddReference("System.Drawing")
from System.Drawing import *
ws.Range["A1"].Font.Color = ColorTranslator.ToOle(Color.Orange)

色号如下图:

(四)单元格格式

#常规
ws.Range("A1").NumberFormatlocal = "G/通用格式"
#数值
#保留小数位数为3  (此处“_”表示:留下一个与下一个字符同等宽度的空格)
ws.Range("A1").NumberFormatlocal = "0.000" 
#不要小数
ws.Range("A1").NumberFormatlocal = "0"
#保留小数位数为3,并使用千位分隔符
ws.Range("A1").NumberFormatlo cal = "#,##0.000"
#货币
ws.Range("A1").NumberFormatlocal = "$#,##0.000"
#百分比
ws.Range("A1").NumberFormatlocal = "0.000%"
#分数
ws.Range("A1").NumberFormatlocal = "# ?/?"
#科学计数
ws.Range("A1").NumberFormatlocal = "0.00E+00"
#文本
ws.Range("A1").NumberFormatlocal = "@"
#特殊
#邮政编码
ws.Range("A1").NumberFormatlocal = "000000"
#中文小写数字
ws.Range("A1").NumberFormatlocal = "[DBNum1]G/通用格式"
#中文大写胡子
ws.Range("A1").NumberFormatlocal = "[DBNum2]G/通用格式"
#人民币大写
ws.Range("A1").NumberFormatlocal = "[DBNum2][$RMB]G/通用格式"

篇幅有限,今天就整理这些吧,有需求,多去翻翻官方API就行了~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现sam(Segment Anything Model)|fastsam模型

sam是2023年提出的一个在图像分割领域的大模型&#xff0c;其具备了对任意现实数据的分割能力&#xff0c;其论文的介绍可以参考 https://hpg123.blog.csdn.net/article/details/131137939&#xff0c;sam的亮点在于提出一种工作模式&#xff0c;同时将多形式的prompt集成到了语…

短剧在线搜索源码(全网首发)

一个非常哇塞的在线短剧搜索页面&#xff0c;接口已经对接好了&#xff0c;上传源码到服务器解压就能直接用&#xff0c;有能力的可以自己改接口自己写自己的接口 接口文档地址&#xff1a;doc.djcat.sbs 源码下载地址&#xff1a;https://pan.xunlei.com/s/VNstN8C6N3VK1a1k…

使用Docker在windows上安装IBM MQ

第一步、安装wsl 详见我另一篇安装wsl文章。 第二步、安装centos 这里推荐两种方式&#xff0c;一种是从微软商城安装&#xff0c;一种是使用提前准备好的镜像安装&#xff0c;详见我另一篇windos下安装centos教程。 第三步、安装windows下的Docker desktop 详见我另一篇wind…

【牛客】HJ62 查找输入整数二进制中1的个数

题目链接&#xff1a;查找输入整数二进制中1的个数_牛客题霸_牛客网 (nowcoder.com) 解题思路&#xff1a; 解法一: 可以举一个八位的二进制例子来进行分析&#xff0c;对于二进制操作&#xff0c;我们直到&#xff0c;除以一个2&#xff0c;原来的数字会减少一个0.如果除的过程…

Window API 使用的一些注意事项

文章目录 1、LPCWSTR类型2、LPCTSTR类型3、LPCSTR类型4、LPCTSTR和LPCWSTR区别5、LPCTSTR和LPCSTR、LPCWSTR三者区别6、_T(" ")7、DWORD类型转换为std::wstring类型8、char类型转换为LPCSTR类型9、获取当前时间戳(毫秒)10、std::wstring和LPCSTR区别11、std::wstring…

2024年【危险化学品生产单位安全生产管理人员】复审考试及危险化学品生产单位安全生产管理人员模拟试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员复审考试根据新危险化学品生产单位安全生产管理人员考试大纲要求&#xff0c;安全生产模拟考试一点通将危险化学品生产单位安全生产管理人员模拟考试试题进行汇编&#xff0c;组成…

Midjourney新算法来袭!解决你角色形象一致性的大难题——亲测猫与女孩跨场景表现

嘿&#xff0c;朋友们&#xff0c;你们想过这个问题吗&#xff1f; 当你在制作一部电影或写一部小说时&#xff0c;你总希望同一个角色能在不同的场景和背景下出现&#xff0c;对吧&#xff1f; 但这时&#xff0c;一个难题冒出来了&#xff1a;如何确保这个角色的形象在各个…

AWS的CISO:GenAI只是一个工具,不是万能钥匙

根据CrowdStrike的年度全球威胁报告,尽管研究人员预计人工智能将放大对防御者和攻击者的影响,但威胁参与者在其行动中使用人工智能的程度有限。该公司上个月在报告中表示:“在整个2023年,很少观察到GenAI支持恶意计算机网络运营的开发和/或执行。” 对于GenAI在网络安全中的…

专升本 C语言笔记-08 goto语句

goto语句 无条件跳转运算符(凡是执行到goto语句会直接跳转到 定义的标签) 缺点&#xff1a;滥用goto语句将会导致逻辑混乱&#xff0c;导致系统崩溃等问题! ! ! 代码演示 int i 0; //定义标签 jump(名字随便起哦) jump:printf("%d ",i); i; if(i < 10)goto j…

Android Studio字体大小调节

外观页面字体调节 settings->Appearance->User cunstom font 代码字体调节 Settings->Editor->Font此时logcat窗口、Build窗口和Ternimal窗口字体大小也会同步调节&#xff08;2023.2.1版本上验证&#xff09;

HDFSRPC协议详解

本文主要阐述HDFSRPCserver端一个socket连接接收字节流的构成&#xff0c;帮助读者理解HDFSRPC协议。注意hadoop版本为3.1.1。 写在前面 关于proto写入和读取&#xff0c;使用writeDelimitedTo和read&#xff0c;应该是通用的方式&#xff0c;不作过多的介绍。 处理rpc各种情…

《智能便利,畅享便利柜平台的架构奇妙之旅》

便利柜平台作为一种智能化、便捷的自助服务解决方案&#xff0c;正在逐渐走进人们的生活。本篇博客将深入探讨便利柜平台的架构设计理念、优势和实践&#xff0c;帮助读者了解如何构建智能便利柜平台&#xff0c;提供更便捷的自助服务体验。 ### 便利柜平台架构设计 #### 1. …

Java8中Stream流API最佳实践Lambda表达式使用示例

文章目录 一、创建流二、中间操作和收集操作筛选 filter去重distinct截取跳过映射合并多个流是否匹配任一元素&#xff1a;anyMatch是否匹配所有元素&#xff1a;allMatch是否未匹配所有元素&#xff1a;noneMatch获取任一元素findAny获取第一个元素findFirst归约数值流的使用中…

数据结构入门篇 之 【双链表】的实现讲解(附完整实现代码及顺序表与线性表的优缺点对比)

一日读书一日功&#xff0c;一日不读十日空 书中自有颜如玉&#xff0c;书中自有黄金屋 一、双链表 1、双链表的结构 2、双链表的实现 1&#xff09;、双向链表中节点的结构定义 2&#xff09;、初始化函数 LTInit 3&#xff09;、尾插函数 LTPushBack 4&#xff09;、头…

单据分页的实现

单据分页的实现 1. AceWzcgfkjtMaintainProxy.java package nc.ui.jych.wzcgfkjt.ace.serviceproxy;import nc.bs.framework.common.NCLocator; import nc.itf.jych.IWzcgfkjtMaintain; import nc.ui.uif2.components.pagination.IPaginationQueryService; import nc.vo.jych.…

软考高级:信息系统开发方法2(形式化方法、统计过程方法等)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

RTC协议与算法基础 - RTP/RTCP

首先&#xff0c;需要说明下&#xff0c;webrtc的核心音视频传输是通过RTP/RTCP协议实现的&#xff0c;源码位于src/modules/rtp_rtcp目录下&#xff1a; 下面让我们对相关的内容基础进行简要分析与说明&#xff1a; 一、TCP与UDP协议 1.1、TCP协议 TCP为了实现数据传输的可…

【Python】新手入门学习:详细介绍依赖倒置原则(DIP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍依赖倒置原则&#xff08;DIP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、Py…

如何将.txtpb在IDE中彩色高亮显示

1. 问题描述 文件内容片段如下&#xff0c;它采用了一种键值对的格式&#xff0c;其中还包括了注释。我们可以采用一种近似的语言色彩识别方案处理它&#xff0c;比如YAML或者Python的语法高亮规则&#xff0c;因为这两种语言在处理键值对和注释的表示上与内容片段相似。当然也…

【QT+QGIS跨平台编译】之七十三:【QGIS_Analysis跨平台编译】—【错误处理:字符串错误】

文章目录 一、字符串错误二、处理方法三、涉及到的文件一、字符串错误 常量中有换行符错误:(也有const char * 到 LPCWSTR 转换的错误) 二、处理方法 需要把对应的文档用记事本打开,另存为 “带有BOM的UTF-8” 三、涉及到的文件 涉及到的文件有: src\analysis\processin…