软件技能|Excel表格转latex格式
2016-02-24 本文已影响582人
马骋
[toc]
引言
用latex排版的朋友都知道,latex排版中,表格的输入非常麻烦。最好的表格工具莫过于Excel,如果能用程序将Excel表格转化成latex格式,那么工作将大大轻松。
问题描述
一个典型的Excel简单表格,如下图所示。简单表格指的是,矩阵形式,没有合并单元格的表格。
![a typical Exce table.png-10.5kB](http://static.zybuluo.com/frank0449/cew6hpnsx190poeoucq3jlco/a%20typical%20Exce%20table.png)
相应的latex代码如下,省去了一些高阶的格式设置代码。
\begin{table}
\caption{试验拉索样本}
\label{tab:sample}
拉索编号 & 拉索型号 & 长度(m) & 钢束直径(mm)\\
SW1 & PES 7-109 & 24.412 & 73.08 \\
SW2 & PES 7-109 & 20.155 & 73.08 \\
SW3 & PES 7-109 & 16.861 & 73.08 \\
SW4 & PES 7-109 & 14.697 & 73.08 \\
SW5 & PES 7-109 & 14.381 & 73.08 \\
SW6 & PES 7-109 & 16.033 & 73.08 \\
\end{table}
可以看出,latex表格代码的关键在于:
- 单元格与单元格之间通过
&
连接; - 行与行之间通过
\\
断行;
显然,手动输入这么多符号非常痛苦,那么有没有可能用程序来实现这一过程呢?
方法
程序为解决重复的确定工作而生。
方法非常简单,不过将我们的手动工作分解为简单步骤告诉计算机去执行而已:
- 将一行的单元格内容
SW1 PES 7-109 24.412 73.08
合并为SW1 & PES 7-109 & 24.412 & 73.08 \\
; - 重复以上工作n次;
实现这一过程最好的编程工具即为Excel自带的VBA。
程序
VBA编程窗口编写以下代码:
Sub xls2tex()
Dim ran As Range
Dim str As String
Dim index As String
Dim r As Range
Dim midrule As String
For iloop = 1 To Selection.Rows.Count
str = ""
index = "M" & iloop
For Each ran In Selection.Range(Cells(iloop, 1), Cells(iloop, Selection.Columns.Count - 1))
str = str & ran & " & "
Next
For Each ran In Selection.Range(Cells(iloop, Selection.Columns.Count), Cells(iloop, Selection.Columns.Count))
str = str & ran & " \\ "
Next
Worksheets("Sheet1").Range(index) = str
Next
End Sub
即生成宏(macro)--xls2tex。
应用
步骤:
- Excel表格输入原始表格;
- 运行宏 xls2tex;
- 得到转换后tex格式表格;
![xls2tex](http://static.zybuluo.com/frank0449/ufzlmubct2sx2ni2xvupgzxh/xls2tex.jpg)
![result](http://static.zybuluo.com/frank0449/pspdkfeox98hljin02nmvlpo/result.jpg)
表格中实际上包含了另外一个程序xls2md,将一般表格转换为markdown格式,用于更加实用的markdown技术文档写作。
![xls2md](http://static.zybuluo.com/frank0449/121qdg4r770ot5gwfg99n0te/xls2md.jpg)
Excel表格下载--转换表格
关于VBA
VBA可能是最简单好用的编程语言,编制这个程序,没有VBA系统学习基础,通过百度搜索相近问题的代码,拼装调试而成。
如果经常使用该宏,最好设置相应的快捷键,一键解决,具体百度。