C语言操作EXCEL文件(读写)

本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时间2018.08.28,如果运行结果均是0,请看文章最后一节)

C语言读操作

C语言写操作

在之前需要使用C语言读取Excel文件内容的功能,查阅了很多资料,大部分是通过ODBC或者过OLE/COM对Excel表格的读取操作,这变要求在工程中添加类,如CApplicaton及其头文件等,这包括Excel接口、导入类、头文件等。操作十分复杂,当然我也对这种方法进行了尝试,也实现了功能,这种方法实现的功能比较多,一般我们只是进行简单的读写操作,所以并不是很想使用这种方法。下面通过C语言读写程序来实现。

一、写操作

第一步:单纯C语言写入Excel文件只能是.xls或者.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.xls","w") ;

for (i=0 ; i<4 ;i++)

fprintf(fp,"%c\t%d\n",chy[i],data[i] ) ;

fclose(fp);

}

void main()

{

writeExcel() ;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

运行结果

二、读操作

读取文件

 

对于读取Excel文件的操作,使用了文件随机定位函数fseek(),它的一般调用格式如下:

fseek(文件指针,位移量,起始位置) ;

fseek()参数说明:

位移量

指重新定位时的字节偏移数,表示相对于基址的字符数,通常是一个长整型数,可以是整形常量,整形表达式等。如果用整型常量,需要再后面加上字母“L”;如果使用整形表达式需要用“(long)(表达式)”强制转换成长整形。

起始位置

指重新定位时的基准点,也就是基址,用整数或符合常量表示。如下表:

整数

符号常量

对应的起始位置

0

SEEK_SET

文件开头

1

SEEK_CUR

文件指针的当前位置

2

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);

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);

}

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]);

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

运行结果

十分抱歉,由于个人疏忽,代码给大家带来麻烦,再次表示抱歉。以上读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);

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);

}

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() ;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

VS2010工程如下: 

运行结果: 

三、最新补充 2018.08.28

由于经常有朋友告诉我运行结果是0

,并将他们的工程发到我邮箱,我试着运行了下,确实发现是0.0 ,程序没有报错。 然后,我试着将他们发给我的工程里的excel文件或者csv文件打开,发现会弹出提示文件损坏,如果我点击“是”的话,文件同样可以继续打开,这可能是文件格式损坏了,所以程序计算不了数据的位置。我简单的将他们的excel文件重新另存为了一个excel,便运行成功了。他们的excel问题如下图。 

损坏后还可以打开: 

谢谢!

有问题可以将工程打包发邮箱hongzhen91@yeah.net ,我会尽快查看,一起讨论下。

c语言从excal读取字符串,C语言操作EXCEL文件(读写)相关推荐

  1. C语言操作EXCEL文件(读写)

    C语言操作EXCEL文件(读写) 本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时间2018.08.28,如果运行结果均是0,请看文章最后一节) C语言读操作 C语言写操作 在之前需要使用C ...

  2. php原生读取excel文件夹,原生php实现excel文件读写的方法分析php技巧

    这篇文章主要介绍了原生php实现excel文件读写的方法,结合实例形式分析了采用原生php针对Excel进行读写操作的相关实现方法与操作注意事项,需要的朋友可以参考下 本文实例分析了原生php实现ex ...

  3. hssfwork 导出excel 文件已损坏_C# NPOI 操作EXCEL文件的读取和导出

    在实际项目中有很多场景遇到需要操作EXCEL文件,而常用到的库就有NPOI:NPOI是开源的POI 项目的.NET版,POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目, ...

  4. python 通过openpyxl来操作Excel文件(一 ):读取Excel文件

    这篇文章讲python 通过openpyxl来读取Excel文件 不清楚怎么通过openpyxl来写入Excel文件的小伙伴可以看我另一篇文章 传送门python 通过openpyxl来操作Excel ...

  5. c语言插入特定的字符串,C语言实现:将一个字符串插入到另一个字符串的指定位置...

    C语言实现:将一个字符串插入到另一个字符串的指定位置 发布时间:2018-08-22 13:23, 浏览次数:1672 示例一: char *insert(char *s1, char *s2, in ...

  6. c 语言比较三个字符串,C语言字符篇(三)字符串比较函数

    C语言字符篇(三)字符串比较函数 #include int strcmp(const char *s1, const char *s2);    比较字符串s1和s2 int strncmp(cons ...

  7. 14c语言合并两个字符串,C语言的标识符和字符数据、字符串数据.ppt

    1·2 C语言的标识符和字符数据.字符串数据 本节的任务是掌握用printf()函 数在屏幕的任意位置打印字 符组成的图案. 1·2·1 C语言的字符串数据.字符数据和转义字符 • 例1_1_2 用p ...

  8. c语言如何浮点数转换为字符串,C语言把浮点数转换为字符串

    1.把float/double格式化输出到字符串 标准的C语言提供了atof函数把字符串转double,但是没有提供把float/double转换为字符串的库函数,而是采用sprintf和snprin ...

  9. c语言如何赋值空字符串,c语言中如何给字符串数组赋值

    c语言中如何给字符串数组赋值 1.问题 这是我写的 struct student { int x; char name[10]; }; void main() { student st: st.nam ...

最新文章

  1. OpenCV 腐蚀和膨胀
  2. 驼峰设计 PPT设计网站
  3. Eclipse连接数据库MySQL以及一些有关数据库的知识
  4. 预训练新范式!为什么Prompt会更有效?
  5. 菜鸟涂鸦作品展_No.24
  6. js中点与方括号及for...in
  7. Android开发:申请小米开发者账号步骤
  8. 怎么提高企业微信加人的通过率,让企业微信加更多客户?快速加人,引流拓客有什么技巧(企微运营干货)
  9. 如何快速调整参考文献格式
  10. 突然间电脑的复制粘贴不能用了???
  11. @Retryable @Backoff @Recover 重试注解的使用
  12. python语音识别(语音转文字)
  13. led灯串怎么摆造型_小串灯怎么挂好看
  14. 个人电脑详细的安全设置方法
  15. 【今日学长】来自柚子帮学长--留学生自用英语写作润色工具分享
  16. 关于我们-找学术会议,上MeetConf!科研人都在看的学术会议网站
  17. 供应链计划的五个步骤,你知道吗?
  18. Linux下查看DNS服务器IP地址
  19. GitHub也能CI/CD了 如何使用GitHub的Action?
  20. STM32F103C8T6和其他stm32的区别

热门文章

  1. UVA10523 Very Easy !!!题解
  2. POJ NOI MATH-7829 神奇序列求和
  3. Git 基础(七)—— 远程仓库(GitHub)
  4. 极简代码(二)—— 转置 list of lists
  5. 机器学习基础(三十二) —— 使用 Apriori 算法进行关联分析
  6. 2018年python工作好找吗-2018年最新数据:python、大数据、人工智能从业者薪资表...
  7. python怎么读取csv文件-使用Python读写csv文件的三种方法
  8. python爬虫什么意思-python的爬虫是什么意思
  9. python培训班靠谱吗-python培训机构靠谱吗?python培训班
  10. python百度百科-Python语言的发展简史