# 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]); | |
} | |
} |
运行结果: