# C 语言操作 EXCEL 文件 (读写)
# 一,写操作
第一步:对表格的处理,使用 C 语言打开表格后,文件指针指向整个表格的第 1 行 第 1 列。
如果要给它的下一个同行单元格 (第 1 行 第 2 列) 写数据,使用 "\t" 分隔符
如果要给它的下一个同列单元格 (第 2 行 第 1 列) 写数据,使用 "\n" 换行符
具体代码如下:
需要引入的头文件:
| #define _CRT_SECURE_NO_WARNINGS | |
| #include <stdio.h> | |
| #include <stdlib.h> | 
| void writeExcel() | |
| { | |
| char chy[4] = { 'x', 'a', 'h', 'w' }; | |
| int data[] = { 3.15F, 6, 4, 2, 7 }; | |
| int data1[] = { 6, 7, 5, 3, 8 }; | |
| int data2[] = { 3, 4, 6, 4, 8 }; | |
| int data3[] = { 5, 6, 7, 5, 10 }; | |
| int data4[] = { 6, 10, 8, 6, 11 }; | |
| int data5[] = { 7, 11, 9, 7, 12 }; | |
| int data6[] = { 7, 8, 10, 10, 11 }; | |
| int i; | |
| FILE* fp = NULL; | |
| fp = fopen("D:\\cExcelTest.xls", "w"); | |
| if (fp == NULL) { | |
| perror("Failed to open file"); | |
| exit(EXIT_FAILURE); | |
|     } | |
| for (i = 0; i < 4; i++) | |
|     { | |
| fprintf(fp, "%d\t%d\t%d\t%d\t%d\t%d\t%d\n", data[i], data1[i], data2[i], data3[i], data4[i], data5[i], data6[i]); | |
|     } | |
| fclose(fp); | |
| } | 
运行结果:

# 二,读操作
读取文件,对于读取 Excel 文件的操作,使用了文件随机定位函数 fseek (),它的一般调用格式如下:
fseek (文件指针,位移量,起始位置)
fseek () 参数说明:
位移量:指重新定位时的字节偏移数,表示相对于基地址的字符数,通常是一个长整型数,可以是整型常量,整型表达式等。如果用整型常量,需要再后面加上字母 "L",如果使用整型表达式需要用 (long) 表达式 强制转换成长整型
起始位置:指重新定位时的基准点,也就是基地址,用整数或字符常量表示。如下表:
| 整数 | 符号常量 | 对应的起始位置 | 
|---|---|---|
| 0 | SEEK_SET | 文件开头 | 
| 1 | SEEK_CUR | 文件指针的当前位置 | 
| 2 | SEEK_END | 文件末尾 | 
例如:fseek (fp, 10L, 0)
具体代码如下:
| void readExcel() | |
| { | |
| FILE* fp; | |
| char filename[40]; | |
| int i, j; | |
| float da[6][5] = {0}; | |
| printf("输入文件名称:"); | |
| gets(filename); | |
| fp = fopen(filename, "r"); | |
| for (i = 0; i < 6; i++) | |
|     { | |
| for (j = 0; j < 5; j++) | |
|         { | |
| fscanf(fp, "%f", &da[i][j]); | |
| fseek(fp, 5L, SEEK_CUR); | |
|         } | |
|     } | |
| 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]); | |
|     } | |
| } | 
运行结果:

