精华内容
下载资源
问答
  • C语言操作EXCEL文件(读写)本文主要介绍通过纯C语言进行EXCEL的读写操作:(修改时间2018.08.28,如果运行结果均是0,请看文章最后一节)C语言读操作C语言写操作在之前需要使用C语言读取Excel文件内容的功能,查阅了很...

    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)”即可,如下图所示:

    a4c26d1e5885305701be709a3d33442f.png

    第二步:对表格的处理,使用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

    运行结果

    a4c26d1e5885305701be709a3d33442f.png

    a4c26d1e5885305701be709a3d33442f.png

    二、读操作

    读取文件

    a4c26d1e5885305701be709a3d33442f.png a4c26d1e5885305701be709a3d33442f.png

    对于读取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

    运行结果

    a4c26d1e5885305701be709a3d33442f.png

    十分抱歉,由于个人疏忽,代码给大家带来麻烦,再次表示抱歉。以上读Excel文件的错误已经解决,代码已经更新,错误的产生是由于fseek(

    )函数放错了位置,以及其中第二个参数的偏移量的错误,若大家在以后学习中发现读取数据全为0或者读取数据顺序位置不正确,请查阅fseek(

    )函数的参数使用方法。

    另外,上述开发是在CodeBlocks中进行的,如果使用Visual Stdio

    2010等版本软件,出现闪退问题,是软件自身bug所致,在main( )函数结尾添加”system(“pause”);

    或者getchar( ); ” 即可解决,对应的VS2010读Excel实例如下:

    例程: a4c26d1e5885305701be709a3d33442f.png

    读该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工程如下: a4c26d1e5885305701be709a3d33442f.png

    运行结果: a4c26d1e5885305701be709a3d33442f.png

    三、最新补充 2018.08.28

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

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

    损坏后还可以打开: a4c26d1e5885305701be709a3d33442f.png

    谢谢!

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

    展开全文
  • c语言读写excel文档

    2018-05-07 16:55:06
    简单的读写excel文档中内容的演示程序,使用vs2005开发的。
  • C语言操作excel

    热门讨论 2011-04-28 16:12:54
    本人写的C语言操作excel的测试函数,功能比较简单,多多包涵。
  • C语言读取Excel文件

    千次阅读 2020-03-03 14:29:59
    C语言要读取xls/xlsx格式文件比较复杂,可以先把xls/xlsx格式另存为csv格式。 比如文件"i.csv"内容如下: csv格式采用逗号分隔符,用记事本打开可以看到: 用 fscanf 读取字符串时,注意指定字符串的格式,要...

    C语言要读取xls/xlsx格式文件比较复杂,可以先把xls/xlsx格式另存为csv格式。

    比如文件"i.csv"内容如下:

    csv格式采用逗号分隔符,用记事本打开可以看到:

    用 fscanf 读取字符串时,注意指定字符串的格式,要用逗号和\n作为分隔符。

    (scanf/fscanf等函数指定字符串格式的方法:点击)

    代码:

    #include <stdio.h>
    
    int main(){
        char filename[] = "i.csv";
        char table[2][3][40];
    
        FILE* fp = fopen(filename,"r");     // fp指向文件头部
        for(int i = 0 ; i < 2 ; i++)
            for(int j = 0 ; j < 3 ; j++){
                fscanf(fp,"%[^,\n]",table[i][j]);  // 读到逗号或\n为止
                fgetc(fp); // 读取一个字符(逗号或\n)
            }
    
        for(int i = 0 ; i < 2 ; i++){
            for(int j = 0 ; j < 3 ; j++)
                printf("%-20s",table[i][j]);   // -20:左对齐,占20个字符宽度
            printf("\n");
        }
        fclose(fp);
        return 0;
    }

    运行结果:

    展开全文
  • csv:简化版excel,在PC机上等同于excel,可进行各种excel计算、画图。#defineEACH_FILE_MAX_BYTE52428800//-------------------------------------------------------------------//功能:存放数据为csv格式//输入...

    csv:简化版excel,在PC机上等同于excel,可进行各种excel计算、画图。

    #defineEACH_FILE_MAX_BYTE52428800

    //-------------------------------------------------------------------

    //功能:存放数据为csv格式

    //输入:filename 写入U盘的文件名称,如ai.csv。

    //name 变量名称。

    //value 值。

    //输出:0:成功!0:失败

    //备注:

    //-------------------------------------------------------------------

    int Hzhy_Write_CsvData(char *filename,char *name,int value)

    {

    int len = 0,size;

    struct tm *p;

    char buff[256];

    time_t timep;

    time(&timep);

    if (InitUsb() < 0)

    return -1;

    p=gmtime(&timep);

    size = UsbGetFileSize(filename);

    if(size == 0)

    {

    memset(buff,0,sizeof(buff));

    printf("Build new file\n");

    sprintf(buff,"变量名,时间,值\n");

    len = strlen(buff);

    UsbWriteFile(filename,buff,len);

    }

    else

    {

    if(size > EACH_FILE_MAX_BYTE)

    {

    printf("Beyond the maximum byte limit !\n");

    return MAX_LEN_ERROR;

    }

    }

    /*{

    static int i=0;

    printf("csv%03d\n",i++);

    }

    */

    memset(buff,0,sizeof(buff));

    sprintf(buff,"%s, %d-%d-%d %d:%d:%d,%d\n",name,(1900+p->tm_year), (1+p->tm_mon),p->tm_mday,p->tm_hour, p->tm_min, p->tm_sec,value);

    len = strlen(buff);

    UsbWriteFile(filename,buff,len);

    return 0;

    }

    //-------------------------------------------------------------------

    //功能:写文件(包含创建)

    //输入:

    //输出:>=0:写入的数目<0:失败

    //备注:

    //-------------------------------------------------------------------

    int UsbWriteFile(char *filename, char *buf, char len)

    {

    int fd,ret=0;

    char name[100];

    if (IsUsbExist == 0)

    return -1;

    if (strlen(filename) > 72)

    {

    printf("file name too long!\n");

    return -4;

    }

    memset(name,0,sizeof(name));

    sprintf(name,usb_path);

    strcat(name,filename);

    //printf("path:%s\n",name);

    fd = open(name,O_RDWR|O_CREAT);//写方式打开文件,如果文件不存在则创建

    if((fd < 0))//打开操作不成功

    {

    static int cnt=0;

    if (cnt == 0)

    {

    cnt = 1;

    printf("The file can not be opened.\n");

    }

    return -2;

    }

    lseek(fd,0,SEEK_END);//文件指针移动到末尾,追加

    ret = write(fd,buf,len);

    if (ret < 0)

    perror("write err");

    close(fd);

    return ret;

    }

    //-------------------------------------------------------------------

    //功能:读文件

    //输入:

    //输出:>=0:读取的数目<0:失败

    //备注:

    //-------------------------------------------------------------------

    int UsbReadFile(char *filename, char *buf, char len)

    {

    int fd,ret=0;

    char name[100];

    if (IsUsbExist == 0)

    return -1;

    if (strlen(filename) > 72)

    {

    printf("file name too long!\n");

    return -4;

    }

    memset(name,0,sizeof(name));

    sprintf(name,usb_path);

    strcat(name,filename);

    //printf("path:%s\n",name);

    fd = open(name,O_RDONLY);

    if((fd < 0))//打开操作不成功

    {

    static int cnt=0;

    if (cnt == 0)

    {

    cnt = 1;

    printf("The file can not be opened.\n");

    }

    return -2;

    }

    lseek(fd,0,SEEK_SET);//文件指针移动到开头

    ret = read(fd,buf,len);

    if (ret < 0)

    perror("read err");

    close(fd);

    printf("read Result:\n%s\n",buf);

    return ret;

    }

    //-------------------------------------------------------------------

    //功能:获取文件大小

    //输入:

    //输出:文件大小

    //备注:

    //-------------------------------------------------------------------

    int UsbGetFileSize(char *filename)

    {

    int fd,size=0;

    char name[100];

    if (IsUsbExist == 0)

    return -1;

    if (strlen(filename) > 72)

    {

    printf("file name too long!\n");

    return -4;

    }

    memset(name,0,sizeof(name));

    sprintf(name,usb_path);

    strcat(name,filename);

    //printf("path:%s\n",name);

    fd = open(name,O_RDONLY);

    if((fd < 0))//打开操作不成功

    {

    static int cnt=0;

    if (cnt == 0)

    {

    cnt = 1;

    printf("The file can not be opened.\n");

    }

    return -2;

    }

    size = lseek(fd,0,SEEK_END);//文件指针移动到末尾

    if (size < 0)

    perror("get size err");

    close(fd);

    //printf("size=%d\n",size);

    return size;

    }

    展开全文
  • 基于C语言Excel文件操作研究.pdf
  • 怎样将Excel文件的数据出来啊,,,最好只是用C语言的库函数哈,,求源代码。。。。。自己参加这个比赛哈想把http://www.cnsoftbei.com/bencandy.php?fid=45&id=691这里的一个随机矩阵的数读取出来,,开始是...
  • 请问各路大神,如何用c语言读取excel文件中的内容,急、、、、、、
  • C语言开发,VS2010,可以模拟Excel界面,可以实现输入、删除、排序、从txt文件中打开、保存等功能
  • C语言操作Excel表格

    2021-05-21 13:58:16
    上网查找了好多的资料发现C语言不能操作Execl表格,说是比较用C++语言好操作,想了解更多请点此链接:C++操作Excel表格。接下来介绍下一位学长介绍给我的方法,比较粗俗,但还是挺实用的。第一步:先实用C语言创建*....

    上网查找了好多的资料发现C语言不能操作Execl表格,说是比较用C++语言好操作,想了解更多请点此链接:C++操作Excel表格。

    接下来介绍下一位学长介绍给我的方法,比较粗俗,但还是挺实用的。

    第一步:先实用C语言创建*.xls的后缀文件,之后把这个文件当做普通的txt文件打开来操作。

    第二步:对表格的处理,使用C语言打开表格后,文件指针指向整个表格的第1行第1列。假如想给它的同行的下一个单元(第1行第2列)写数据,使用"\t";假如想给它的下一行同列(第2行第1列)写数据,使用“\n”。

    具体的示例如下代码:

    #include

    void writeExcel(void ) {

    FILE *fp = NULL;

    int t;

    char ch;

    fp = fopen("F:\\test.xls", "w");

    for (int i = 0; i < 10; i++) {

    printf("please input:");

    scanf("%d %c", &t, &ch);

    fprintf(fp, "%d\t%c\n", t, ch);

    }

    fclose(fp);

    }

    int main() {

    writeExcel();

    return 0;

    }

    输入数据:

    0818b9ca8b590ca3270a3433284dd417.png

    运行结果:

    0818b9ca8b590ca3270a3433284dd417.png

    表格里的数据:

    0818b9ca8b590ca3270a3433284dd417.png

    c语言或者php按writeExcel()函数来操作的,建议在使用标准输入前,先把输入缓存区清空,免得得到的结果不是期望的,清空办法如此:setbuf(stdin,NUL); 还有其他方法,建议大家多去网站搜去,且自己亲自试验。

    假如把上边的文件名F:\\test.xls 改成F:\\test.csv 的话,此时等数据写完,可以单击右键使用”写字板“的方法打开,打开得到按行("\n")分割,每行里每个单元格是按逗号(”,“)分割的。示例如下:

    c语言操作csv.csv 的表格使用默认方式为wps或Excel打开,内容如下:

    0818b9ca8b590ca3270a3433284dd417.png

    c语言操作csv.csv 的表格使用写字板的方式打开,内容如下:

    0818b9ca8b590ca3270a3433284dd417.png

    通过这么一对比,其实它csv里边就是这么存储的.故可以这么推测理解Excel表格里的格式(个人见解,仅供学习参考)。

    最近学习了php语言,面向对象的语言还是牛,有直接操作表格的函数,或者是类。建议学习一下php直接操作表格csv格式,这种方式比较通用。(链接:php操作csv表格)

    展开全文
  • excel表格 怎么把C列的数据和A列的对等起来使用VLOOKUP函数公式即可。具体步骤:在C列插入两列在...C语言怎么操纵Excel表格Excel表格可以用TAB分隔的列,回车分隔的行的文本文件。因此,最简单的办法是输出以TA...
  • C语言再学习 -- 创建excel文件

    千次阅读 2020-10-17 13:33:08
    参看:C语言操作Excel表格 上一篇文章讲了一下 cJSON,可以生成json文件了。这篇文章讲一下怎么生成excel表xsl格式文件。 注意点: 1、文件类型为 xls 或者 xlsx 2、使用fprintf写入 3、了解转义字符 参看:C语言再...
  • 之前写过类似的文章:https://blog.csdn.net/morixinguan/article/details/83309576关于文件操作,特别是从后往前读取,要是像上面这篇文章一样去操作,那效率明显就太低了,如果一旦数据一多,很难处理。...
  • 目录 1.前期准备工作 ...项目中需要创建 Excel文件,对C语言还不是特别熟练,以为用fopen函数就可以创建并使用了,创建完文件打开的时候,提示“无法打开该文件,因为格式或者文件扩展名无效,请
  • 笔者结合C语言Excel文件的OLE操作函数,开发出的应用程序简单易用,解决了财务核价工作面临的这一难题。核价的目的核价没有规律与理论的依据,是一个很活的东西。但是也是有一定的依靠的。它分为前核算与后核算。前...
  • [FileDemoList.java.rar]-一种递归方法,用于列出文件夹中的所有文件,包括子文件夹,文件夹和文件。...很好而且很实用[RS232_to_Excel.rar]-用C ++ Builder6.0实现以下编程:通过RS232串口传输单片机,并以Excel...
  • 怎么把C语言中产生的数据导入到Excel表格1和c说话产ascii文件应用空格做作为数隔符。2和进入excel选择数据选项卡/获取外部数据对象组/自文本按3和进入数据导入对话框在第一步中选择应用数据分隔符不选固定命据长度在...
  • C语言-文件读写操作

    千次阅读 2019-04-19 11:35:01
    C 语言把文件看作是一个字符的序列,即文件是由一个一个字符组成的字符流,因此 c 语言将文件也称之为文件流。 即当读写一个文件时,可以不必关心文件的格式或结构。 2、文本文件和二进制文件: 计算机文件的存储...
  • c读取excel文件内容

    2021-05-14 02:24:06
    要做的是在Linux环境下使用C语言实现快速读取excel文件并保存成文本格式基本思路 基础实现方法同上篇文章《直接通过ODBC读、写Excel表格文件》相同,都是通过ODBC来把Excel表格文件当成数据库文件来进行读、写等操作...
  • #include<stdio.h>#define M 2/*容量*/struct _674{long num;char name[20];char add[20];long tel;}A[M],B[1];void input(){int i=1;char a='y';while(a=='y'){if(i<=M){printf("请输入你要输入的学生学号...
  • 什么是文件 磁盘上的文件文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件 程序文件: 数据文件: 包括源程序文件(后缀为 .c ),目标文件(windows环境后缀为.obj),可执行程序...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,022
精华内容 2,408
关键字:

c语言如何操作excel文件

c语言 订阅