C语言读取excel文件

步骤

  1. 将Excel文件另存为*.csv文件(是和txt一样,以二进制文本形式存储,它是以都逗号分隔符做个单元格内容的划分),这里要特别注意在另存为时,会有两个关于csv的选项,如果需要在C语言中,读取中文,需要选择 CSV(逗号风格)(*.csv)。CSV UTF-8格式,在C语言中中文会出现乱码。
    在这里插入图片描述
  2. 在C语言中使用FILE,读取数据。将表格数据存入数组中。细节见代码注释:
#define maxFactorNumber 128 //最大因素个数
//这里需要存储字符串的值到数组,所以不能写成typedef char * Matrix[maxYSNumber][maxYSNumber];
//否则只能保存引用。一旦被引用的字符串发生变化,就会产生意想不到的结果。
typedef char Matrix[maxFactorNumber][maxFactorNumber][128];

//从cvs文件中读取矩阵信息
void readMatrix(char * filePath,Matrix m)//读取文件内容到矩阵m
{
	FILE *fp = NULL;
	char *line,*record;
	char buffer[1024];
	int x=0,y=0,n=0;

	if ((fp=fopen(filePath,"r")) != NULL)
	{
		char delims[] = ",";
		wchar_t *result = NULL;
		while (line = fgets(buffer, sizeof(buffer), fp))//当没有读取到文件末尾时循环继续
		{
			line[strlen(line)-1]='\0';//去除\r\n,无法通过查找\r或\n来处理,但确实先执行\r,将光标移动到第一个字符钱,然后往下一行。可能vc2010对回车的解释看做一个字符?
			record = strtok(line, ",");
			while (record)//读取每一行的数据
			{
				memcpy(m[x][y],record,128);//考虑到小数点以及结束符,使用128,而不要用sizeof。
				record = strtok(NULL, ",");	
				y++;
			}
			y=0;
			x++;
		}
		fclose(fp);
		fp = NULL;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41958234/article/details/105681204