您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“怎么利用純C語言對EXCEL進行讀寫操作”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么利用純C語言對EXCEL進行讀寫操作”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
第一步:單純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);
具體代碼如下:
#include <stdio.h> 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); /*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文件代碼如下:
#include <stdio.h> 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); /*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進行讀寫操作”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。