在Excel/WPS中运行Python代码

在MS官方推出Excel对Python语言支持之前,可以使用xlwings方案。 如果你采用的发行是Anaconda或WinPython,恭喜你,你已经安装了xlwings。否则,使用pip手动安装: 1 2 pip install xlwings xlwings addin install 顺利的话,你将在Excel顶端找到xlwings缎带区。在开始使用Python之前,需要对Excel进行一次性的设置。在File > Options > Trust Center > Trust Center Settings > Macro Settings下勾选Enable Trust access to the VBA project object model。 快速新建一个测试项目: 1 xlwings quickstart Book1 会新建一个Book1目录出来,Book1目录下有保存了宏的Book1.xlsm和同名Python文件Book1.py。 接下来见证奇迹。在xlwings缎带区点击Run main。

三月 1, 2021 · 1 分钟 · Hanson Hu

Python库中一些与科学计算相关的方法

1 numpy.zeros(shape, dtype=float, order='C') 返回1个给定形状和类型的新数组,并用0填充; 1 random.random() 返回在[0.0, 1.0)范围内的下一个随机浮点数; 1 random.uniform(a, b) 返回1个随机浮点数,满足条件a <= N <= b(当a <= b时); 1 random.sample(population, k) 返回从序列population中1个长度为k的取样,序列population中的元素不必是不同的值; 1 numpy.random.randint(low, high=None, size=None) 返回1个在[low, high)范围内满足离散型均匀分布的随机整数,如果high是None(默认),结果就在[0, low)范围内; 1 numpy.random.normal(loc=0.0, scale=1.0, size=None) 返回1个从正态(高斯)分布中抽样的数组; 1 numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0) 创建1个数组; 1 numpy.nonzero(a) 返回1个数组的元组,元组的元素数是a的维度数,每个元素是所有非0元素在该维度上的索引组成的数组; 1 numpy.where(condition[, x, y]) 如果没有给出参数x和y,返回condition.nonzero(),即condition是True的索引的数组; 如果给出参数x和y(x、y中元素的数量必须与condition中元素的数量一致),返回一个由condition中对应位置元素是True还是False来决定从x还是y中取值的结果组成的数组; 1 numpy.cumsum(a, axis=None, dtype=None, out=None) 计算数组元素沿1个特定的轴的累和; 1 numpy.mean(a, axis=None, dtype=None, out=None) 计算数组元素沿1个特定的轴的算术平均值; 1 numpy.linalg.norm(x, ord=None, axis=None) 计算矩阵或向量的范数。如果x是矩阵,根据不同的参数ord,可以返回7个矩阵范数中的1个; 如果x是向量,可以返回无限个向量范数中的1个。

二月 10, 2014 · 1 分钟 · Hanson Hu

锟斤拷

今天不是聊我新取的ID——虽然它真是很酷的一个,又来聊乱码问题了。相信每一个在非英语环境中工作的程序员都受到过乱码的困扰,做为程序员,简单的说,应始终意识到在内存中字符串是以Unicode方式表示的,在I/O时尽量使用UTF-8编码(除了在中文Windows控制台输出时不得已而使用GBK/GB18030),当遇到不可控制的外部系统使用了其他编码方式时,使用恰当的方法进行解码。 Unicode的基本多文种平面(Basic Multilingual Plane,BMP),即UCS-2,共有216=65536个字符,能够满足绝大多数使用需求,另外的补充多文种平面(Supplementary Multilingual Plane,SMP),即UCS-4,更是提供了231=2147483648个地址空间(UCS-4的首位恒为0),实际上在Unicode标准中已经定义了超过10万个字符,提供给全体地球人使用。 考虑以下Java代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 logger.info("当前JRE版本:" + System.getProperty("java.version")); logger.info("当前默认字符集:" + Charset.defaultCharset()); String str = "UTF-8字符"; byte[] bytes = {(byte) 0xC0, (byte) 0xC0}; try { byte[] b1 = str.getBytes("ISO-8859-1"); logger.info("使用ISO-8859-1编码:{}", toHexStr(b1)); logger.info("使用UTF-8解码并转为Unicode字符串:{}", new String(b1, "UTF-8")); String s1 = new String(bytes, "UTF-8"); logger.info("使用UTF-8解码并转为Unicode字符串:{}", s1); b1 = s1.getBytes(); logger.info("使用UTF-8编码:{}", toHexStr(b1)); logger.info("使用GB18030解码并转为Unicode字符串:{}", new String(b1, "GB18030")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } 输出为: ...

四月 23, 2011 · 1 分钟 · Hanson Hu

Python字符编码常识

Unicode是被所有主要计算机公司接受的非官方字符集,而ISO 10646(UCS)是被视为全球法定标准。两个标准包括相同的字符库和二进制表示。 为了方便传输和存储,一般要对Unicode进行编码转换。常见的编码有ISO8859-1、GB2312、GBK、UTF-8,和UTF-16等,其中UTF-16直接就是Unicode编码,未做转换。Unicode 5.0如果不算兼容区共包含70217个汉字。GB2312有6763个汉字,GBK有21003个汉字,GB18030-2000有27533个汉字,GB18030-2005有70244个汉字。 Python中的str和unicode类型分别对应字节码字符串(Byte string,不提扩展ASCII字符集了)和最多占据4字节的数字(Unicode字符集)。任何时候仅在程序内部使用Unicode对象进行保存和计算,I/O时需要进行编码。decode(encoding)可以把字节码字符串转换为Unicode,encode(encoding)可以把Unicode转换为字节码字符串。 1 2 3 4 5 6 > >>> '海生' > '\xba\xa3\xc9\xfa' > >>> u'海生' > u'\u6d77\u751f' > >>> '海生'.decode('gbk') > u'\u6d77\u751f' 要工作在UTF-8下,需要将Python源代码以带BOM的UTF-8编码保存,并在文件头部添加: 1 2 > #!/usr/bin/env python > # -*- coding: UTF-8 -*- Windows上大量应用程序以代码页(Code page)为基础,简体中文Windows XP的默认代码页是936,即编码是GBK,在不指定编码时使用。 1 2 3 4 5 6 > >>> u'\u9fa5'.encode('gbk') > '\xfd\x9b' > >>> print u'\u9fa5'.encode('gbk') > 龥 > >>> print u'\u9fa5' > 龥 同样的数据经过不同的编码可以得到不同的二进制结果,如果查询同样的GBK代码页可能对应于不同的字符。也就是说,使用与环境不兼容的编码是引入乱码的原因。 1 2 3 4 5 6 > >>> u'\u9fa5'.encode('utf-8') > '\xe9\xbe\xa5' > >>> print u'\u9fa5'.encode('utf-8') > 榫 > >>> '榫' > '\xe9\xbe' 在GB18030中新添加的汉字不能使用GBK编码,即便通过GB18030编码后也不能在未配置相应代码页的终端上正常显示。 ...

一月 21, 2010 · 1 分钟 · Hanson Hu

CSS常识及奇技淫巧

常识 div+css的说法算是以讹传讹(同样用SSH代替J2EE,一样让人生厌),如果非要表达符合web标准的页面开发,或许可以用xhtml+css; div仅是一个纯洁的块(block)元素而已,块元素还包括form、h1-h6、hr、p、table等; span是同样纯洁的内联(inline)元素,内联元素还包括a、input等; css布局模型包括:流(flow)模型、浮动(float)模型,和层(layer)模型; DTD声明会影响浏览器工作在compliance模式还是quirks模式。 css filters & hacks 这里的filter不是指IE的透明特效,而是指利用特别的技巧在不同的浏览器(版本)下隐藏或强制一些css行为,从而在非兼容的浏览器中实现一致的外观; hack时常用的选择符和属性写法包括以下类型: !important; 下划线属性; 转义属性; * html; 属性选择符; 子对象选择符(>); 相邻选择符; 转义选择符(\); 注释反斜杠(/* xyz \*/)。 很好的参考资料(但不那么实用) http://centricle.com/ref/css/filters/ http://www.communis.co.uk/dithered/css_filters/css_only/index.html 这里精简一下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 > /* 只对IE6 */ > * html #elem { color: red; } > #elem { _color: red; } > > /* 只对IE7 */ > *+html #elem { color: red; } > > /* 只对IE6、IE7 */ > #elem { *color: red; } > #elem { #color: red; } > > /* 只对IE7、IE8 */ > #elem { color/*\**/: red\9; } > > /* 只对IE */ > #elem { color: red\9; } > > /* 排除IE6 */ > html>body #elem { color: red; } > html[xmlns] #elem { color: red; } > head:first-child+body #elem { color: red; } > #elem { color/**/: red; } > #elem { color: red !important; color: blue; } > > /* 排除IE6和IE7 */ > html>/**/body #elem { color: red; } > > /* 排除IE(对FF、Chrome、Op、Saf均可) */ > body:nth-of-type(1) #elem { color: red; } > body:first-of-type #elem { color: red; } > > /* 只对FF */ > #elem, x:-moz-any-link { color: red; } css tricks 按标准,父元素不会根据子元素的内容进行高度自适应,这时可为父元素增加overflow:auto;和display:inline-block;; 子元素指定position:absolute;时,会按指定了position:relative;的父元素进行子元素的绝对定位,不指定的话默认是position:static;哦; IE6,指定float:left;时,浮向一边的边界会变成指定边界的2倍,解决方法是再指定display:inline;。

一月 10, 2010 · 2 分钟 · Hanson Hu