用C语言写CSV文件,如何写出多个工作表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言写CSV文件,如何写出多个工作表?相关的知识,希望对你有一定的参考价值。

参考技术A CSV
文件
不支持
EXCEL中
的多个工作表的模式。
一个
CVS
文件只能转换成
EXCEL
一个工作表。
另外,如果你想把一个
EXCEL
文件保存为
CSV
文件,也会提示你是否只保存当前活动的工作表,或者为每个工作表分别保存一个
CSV
文件。
参考技术B 1、CSV
文件
不支持
EXCEL中
的多个工作表的模式。
一个
CVS
文件只能转换成
EXCEL
一个工作表。
2、逗号分隔值(Comma-Separated
Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
参考技术C csv文件即逗号分隔值文件。
逗号分隔值(comma-separated
values,csv,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
csv文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
要用c语言读取csv,首先需要确定文件中定义的字符分隔值,以及每一行各个列的元素格式。
如果所有的元素格式相同,那么可以每行一个一维数组,所有行组成一个二维数组,逐个元素进行读取。
如果元素格式不同,可以按照元素类型,构建一个结构体,每行读到一个结构体变量中,所有行组成一个结构体数组。
下面根据两种情况,按照分隔符为逗号(,),分别举一个例子:
文件名设定为in.csv,每行10个元素。
一、所有元素均相同类型,比如int型。
#include <stdio.h>
int main()

file*fp;
int a[100][10];//定义一个足够大的数组来存储。
int line = 0;
int c, i;
fp = fopen("in.csv", "r"); // 以文本方式打开。
if(fp == null) return -1; // 打开文件失败。
while(1)

i=0;//列标记清零。
while(1)

fscanf(fp, "%d", &a[line][i]);//从文件中读取一个元素。
c = getchar();//读取下一个字符,可能是分隔符,换行符或文件结尾。
if(c == '\n'||c == eof)break;//读完一行,或者到文件结尾,退出读取。
i++;

line ++;
if(c == eof) break;

fclose(fp); //关闭文件。
//以下循环用来打印所有读到的值。
for(i = 0; i < line; i ++)

for(c = 0; c < 10; c ++)
printf("%d ", a[i][c]);
printf("\n");

二、每行元素不同。
比如共三列,第一列是int型,第二列是字符串,第三列是float型。
如果分隔符不是空白字符,或者字符串元素中可能存在除分隔符外的其它空白字符,在读取字符串的时候是不能用fscanf函数的。
定义结构体如下
strcut data

int a;
char s[100]; //根据实际要求,定义足够大的字符数组。
float f;
;读取代码如下:
#include <stdio.h>
int main()

file*fp;
strcut data a[100];//定义一个足够大的结构体一维数组来存储。
int line = 0;
int c,i;
fp = fopen("in.csv", "r"); // 以文本方式打开。
if(fp == null) return -1; // 打开文件失败。
while(1)

fscanf(fp, "%d", &a[line].a);//从文件中读取第一个元素。
c = getchar();//读取分隔符。
//接下来要读取字符串,需要逐个字符读入,直到出现分隔符为止。
i = 0;
while(1)

a[line].s[i] = getchar();//读入一个字符。
if(a[line].s[i] == ',')//发现分隔符

a[line].s[i]='\0'; //赋值字符串结束符。
break;//退出读取字符串。

i++;

//由于在读字符串的时候分隔符已经被读取,这里不需要读分隔符,而是直接读下一个元素。
fscanf(fp, "%f", &a[line].f);//从文件中读取最后一个元素。
c = getchar();//读取下一个字符,可能是换行符或文件结尾。
line ++;
if(c == eof) break;//到文件结尾,退出读取。

fclose(fp); //关闭文件。
//以下循环用来打印所有读到的值。
for(i = 0; i < line; i ++)

printf("%d %s %f\n", a[i].a, a[i].s, a[i].f);

在 CSV 文件中创建多个工作表

【中文标题】在 CSV 文件中创建多个工作表【英文标题】:Creating multiple sheets in CSV file 【发布时间】:2014-05-20 13:32:20 【问题描述】:

我正在使用 superCSV 在我的代码中以 csv 格式写入数据。它的工作非常好而且非常有效,但现在我的要求发生了变化。我需要在单个 xls 文件中编写多张工作表,这是非常耗时的任务。那么在 supercsv 中有什么方法可以让我在单个 csv 文件中写入多个工作表数据并将其发送给客户端,这样当客户端在 MS-Excel 中打开这个 csv 文件时,他可以看到多个工作表而不是我生成带有多张工作表的excel文件并将其发送给客户。

谢谢

【问题讨论】:

【参考方案1】:

CSV 是一种非常简单的格式,没有“表格”的概念。 所以,不,这不可能直接。 我唯一可以建议的是将多个 csv 文件发送给客户端,可能是一个 .zip 文件,然后让客户端将其解压缩并一次将一张导入 Excel。

如果您需要直接在浏览器中打开它,则需要使用 xls 文件。

【讨论】:

【参考方案2】:

看看这里的api。

http://supercsv.sourceforge.net/apidocs/index.html

我不熟悉 SuperCsv,如果我错了,请不要把我打得太惨... 你不能把 CsvPreference 设置为 EXCEL

【讨论】:

首选项只是设置引号和分隔符的设置方式。它没有(也不能)将“表格”的概念引入 csv 格式。 哦,我明白了。感谢您抽出宝贵时间为我提供更好的见解。

以上是关于用C语言写CSV文件,如何写出多个工作表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一个Excel工作簿中将两个不同的CSV文件转换为两个工作表?

在 CSV 文件中创建多个工作表

使用 Jupyter notebook 将具有多个工作表的 Excel 文件转换为多个 csv 文件

我的批处理文件应该有啥代码将多个 CSV 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表?

如何将C语言的输出倒入Excel工作表

怎样在excel中编写CSV文件