这两天要用C批量打开一批Excel文件,研究了下网上的资料,大多用的非标准库函数之类自己也不太懂。
首先Excel可以另存为csv格式,记得多张sheet要分别保存,csv是只保存当前sheet的,也不保留公式。
关于批量处理,仔细想了下,可以用参数宏比较方便的实现批量操作 有规律路径和命名 文件。
这里规律是指每层文件路径是顺序的,如A1、A2,A3每个文件夹下面都有B1,B2,B3 。用ascii操作除了0,1,2....这种规律也可以是字符顺序。当然在大括号包含的函数体里加入选择筛选也可以进一步对每个文件夹特化。
实现思路是用参数宏来写带参数的文件路径,每层可以对应一个参数。记得windows下的 "\" 一定要写作 “\\”
然后用字符串宏和一个传递宏,将记录了文件路径的宏转化为对应的字符串。这里因为宏只能展开一次所以用周转宏保证内层宏可以正常展开。
没有什么技术含量的工作,仅为了方便和我一样临时学C的同志。
源程序开头的宏定义如下:
#define aligado(n1,n2,n3) C:\\An1\\Bn2\\Cn3.csv //这里zxn是文件路径中变化的部分
//如果文件夹本身有命名规律,其内层文件又有规律,只需要用多个参数的宏放在路径对应位置就可以了
#define _STR(str) #str // 将宏str转化为对应的字符串“str”
#define STR(str) _STR(str) //由于内层宏无法直接展开,所以这里用一层宏作为周转,内层的宏就可以展开了
调用的时候如下:
for(i=0;i<5;i++) //打开在C盘目录下A0到A4文件夹,每个中B0到B4子文件夹 ,中每个C0到C9的csv格式表格
for(j=0;j<5;j++)
for(k=0;k<10;k++)
{
fp=fopen(STR(aligado(i,j,k)),"r");
这里你想对它做什么都可以
fclose(fp);
}