C语言操作EXCEL文件(读写)本文主要介绍通过纯C语言进行EXCEL的读写操作修改时间2018.08.28如果运行结果均是0请看文章最后一节在之前需要使用C语言读取Excel文件内容的功能查阅了很多资料大部分是通过ODBC或者过OLE/COM对Excel表格的读取操作这变要求在工程中添加类如CApplicaton及其头文件等这包括Excel接口、导入类、头文件等。操作十分复杂当然我也对这种方法进行了尝试也实现了功能这种方法实现的功能比较多一般我们只是进行简单的读写操作所以并不是很想使用这种方法。下面通过C语言读写程序来实现。一、写操作第一步单纯C语言写入Excel文件只能是 *.csv的后缀文件是和txt一样以二进制文本形式存储它是以都逗号分隔符做个单元格内容的划分 .xls存储比较复杂 .csv文件可以可以通过.xls或者.xlsx文件另存为选择.csv文件格式它们可以通过Notepad等记事本软件当做txt文件打开。需要注意的是当对*.xls文件写入或者读取之后再打开Excel文件时会弹出格式兼容的提示窗口因为这样的C语言操作Excel文件是当文本文件打开操作的所以会忽略原有格式但是不影响点击“是(Y)”即可如下图所示第二步对表格的处理使用C语言打开表格后文件指针指向整个表格的第1行第1列。如果要给它的下一个同行单元格第1行第2列写数据使用\t ;如果要给它的下一个同列单元格第2行第1列写数据使用\n 。具体代码如下void writeExcel() { char chy[4]{ x ,a ,h,w } ; int data[4]{ 1 , 3 , 6 ,9 }; int i ; FILE *fp NULL ; fp fopen(G:\\Desktop\\test.csv,w) ; for (i0 ; i4 ;i) fprintf(fp,%c\t%d\n,chy[i],data[i] ) ; fclose(fp); } void main() { writeExcel() ; }运行结果二、读操作读取文件对于读取Excel文件的操作使用了文件随机定位函数fseek(),它的一般调用格式如下fseek(文件指针位移量起始位置) ;**fseek()**参数说明位移量: 指重新定位时的字节偏移数表示相对于基址的字符数通常是一个长整型数可以是整形常量整形表达式等。如果用整型常量需要再后面加上字母“L”如果使用整形表达式需要用“(long)(表达式)”强制转换成长整形。起始位置指重新定位时的基准点也就是基址用整数或符合常量表示。如下表整数符号常量对应的起始位置SEEK_SET文件开头SEEK_CUR文件指针的当前位置SEEK_END文件末尾例如fseek(fp , 10L , 0) ;具体代码如下#include void main() { FILE *fp; char filename[40] ; int i,j ; float da[6][5] {0} ; printf( 输入文件名: ); gets(filename); fpfopen(filename,r); // fp指针指向文件头部 for(i 0 ;i 6 ; i) for(j 0 ;j 5 ; j) { fscanf(fp,%f,da[i][j]); fseek(fp, 5L, SEEK_CUR); /*fp指针从当前位置向后移动*/ } for(i 0 ;i 6 ; i) printf(%f\t%f\t%f\t%f\t%f\t\n,da[i][0], da[i][1],da[i][2],da[i][3],da[i][4]); }运行结果十分抱歉由于个人疏忽代码给大家带来麻烦再次表示抱歉。以上读Excel文件的错误已经解决代码已经更新错误的产生是由于fseek( )函数放错了位置以及其中第二个参数的偏移量的错误若大家在以后学习中发现读取数据全为0或者读取数据顺序位置不正确请查阅fseek( )函数的参数使用方法。另外上述开发是在CodeBlocks中进行的如果使用Visual Stdio 2010等版本软件出现闪退问题是软件自身bug所致在main( )函数结尾添加system(“pause”); 或者getchar( ); 即可解决对应的VS2010读Excel实例如下例程读该Excel文件代码如下#include void main() { FILE *fp; char filename[40] ; int i,j ; float da[6][5] {0} ; printf( 输入文件名: ); gets(filename); fpfopen(as.csv,r); fseek(fp, 5L, SEEK_SET); // 从文件第二行开始读取 for(i 0 ;i 6 ; i) for(j 0 ;j 5 ; j) { fscanf(fp,%f,da[i][j]); fseek(fp, 1L, SEEK_CUR); /*fp指针从当前位置向后移动*/ } for(i 0 ;i 6 ; i) printf(%f\t%f\t%f\t%f\t%f\t\n,da[i][0], da[i][1],da[i][2],da[i][3],da[i][4]); getchar() ; }VS2010工程如下运行结果三、最新补充 2018.08.28由于经常有朋友告诉我运行结果是0 并将他们的工程发到我邮箱我试着运行了下确实发现是0.0 程序没有报错。然后我试着将他们发给我的工程里的excel文件或者csv文件打开发现会弹出提示文件损坏如果我点击“是”的话文件同样可以继续打开这可能是文件格式损坏了所以程序计算不了数据的位置。我简单的将他们的excel文件重新另存为了一个excel便运行成功了。他们的excel问题如下图。损坏后还可以打开谢谢 有问题可以一起讨论下不过希望自己能够一步从简到繁的进行调试也是一种学习希望不用直接把代码扔过来让给修改。