将化合物结构转成SDF,并批量插入excel

205服务器
其实能用canvas直接导出成excel最为简单,但是由于某些时候canvas导出的结构显示错误,所以就写了以下脚本以备不时之需
安装所需要的python模块
  • pip3 install cairosvg
  • pip3 install pillow
先用openbabel将cdx文件转成svg矢量图,再用cairosvg(直接转成png格式清晰度受限,因此先转成svg)
  • for i in `ls ../cdx`;do a=`basename $i .cdx`;echo $a;obabel -icdx ../cdx/$i -osvg -O $a.svg;done
  • for i in `ls ./`;do a=`basename $i .svg`;echo $a;cairosvg $i -d 1200 --output-width 600 --output-height 600 -o $a.png;done
白底直接插入excel会导致边框受限,不利于查看,因此用python脚本将白底去掉(transparent.py)
  • import sys
  • file=sys.argv[1] #将脚本后的第一个参数传入
  • import PIL.Image as Image
  • img = Image.open(file + ".png").convert('RGBA')
  • W, L = img.size
  • white_pixel = (255, 255, 255, 255)  # 白色
  • for h in range(W):
  •     for i in range(L):
  •         if img.getpixel((h, i)) == white_pixel:
  •             img.putpixel((h, i), (0, 0, 0, 0))   # 设置透明
  • img.save(file + "-trans.png")  # 自己设置保存名称


运行上述脚本,需要转换的图片名称放在脚本后面作为参数输入
  • for i in `ls ./|grep "png"`;do a=`basename $i .png`;echo $a;/home/zjxu/prog/anaconda3/bin/python3.8 transparent.py $a;done
生成excel插入图片的函数
  • <table><img src="C:\Users\zlp\Desktop\图库\NF-6-10a2.png"width="180"height="180"> #根据文件路径以及需要插入的长宽调整参数

  • for i in `ls ./|grep "-trans.png"`;do echo "<table><img src=\"C:\\Users\\zlp\\Desktop\\图库\\$i\"width=\"180\"height=\"180\">" >> insert.txt;done   #生成批量插入的函数
  • #可根据需要的顺序先从excel表格中copy到文本order.dat,再将for i in `ls ./|grep "-trans.png"`替换为for i in `cat order.dat`
将excel需要插入图片的那一列根据图片大小调整长宽,然后复制insert.txt的内容,右击第一个插入的单元格
图片会按照函数的顺序将图片插入到单元格中,如果需要调整位置和大小,可ctrl+A全选之后,批量调整