怎么利用纯C语言对EXCEL进行读写操作
本文小编为大家详细介绍“怎么利用纯C语言对EXCEL进行读写操作”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么利用纯C语言对EXCEL进行读写操作”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都网站制作、孟连网络推广、微信小程序定制开发、孟连网络营销、孟连企业策划、孟连品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供孟连建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
一、写操作
第一步:单纯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 (i=0 ; i<4 ;i++) fprintf(fp,"%c\t%d\n",chy[i],data[i] ) ; fclose(fp); } void main() { writeExcel() ; }
运行结果
二、读操作
读取文件
对于读取Excel文件的操作,使用了文件随机定位函数fseek(),它的一般调用格式如下:
fseek(文件指针,位移量,起始位置) ;
**fseek()**参数说明:
位移量
: 指重新定位时的字节偏移数,表示相对于基址的字符数,通常是一个长整型数,可以是整形常量,整形表达式等。如果用整型常量,需要再后面加上字母“L”;如果使用整形表达式需要用“(long)(表达式)”强制转换成长整形。
起始位置
指重新定位时的基准点,也就是基址,用整数或符合常量表示。如下表:
整数 | 符号常量 | 对应的起始位置 |
---|---|---|
0 | SEEK_SET | 文件开头 |
1 | SEEK_CUR | 文件指针的当前位置 |
2 | SEEK_END | 文件末尾 |
例如:
fseek(fp , 10L , 0);
具体代码如下:
#includevoid main() { FILE *fp; char filename[40] ; int i,j ; float da[6][5] = {0} ; printf(" 输入文件名: "); gets(filename); fp=fopen(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文件代码如下:
#includevoid main() { FILE *fp; char filename[40] ; int i,j ; float da[6][5] = {0} ; printf(" 输入文件名: "); gets(filename); fp=fopen("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工程如下:
运行结果:
三、最新补充
由于经常有朋友告诉我运行结果是0 ,并将他们的工程发到我邮箱,我试着运行了下,确实发现是0.0 ,程序没有报错。
然后,我试着将他们发给我的工程里的excel文件或者csv文件打开,发现会弹出提示文件损坏,如果我点击“是”的话,文件同样可以继续打开,这可能是文件格式损坏了,所以程序计算不了数据的位置。我简单的将他们的excel文件重新另存为了一个excel,便运行成功了。他们的excel问题如下图。
损坏后还可以打开
读到这里,这篇“怎么利用纯C语言对EXCEL进行读写操作”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注创新互联行业资讯频道。
文章名称:怎么利用纯C语言对EXCEL进行读写操作
文章源于:http://pwwzsj.com/article/jgjpjc.html