① C# 對Excel進行編程
首先,添加 Excel.dll導入: public void ReadExcelToTable(string filepath)
{
string excelfilePath = filepath;
Excel.Application myExcel = new Excel.ApplicationClass();
Excel.Workbooks myBooks = myExcel.Application.Workbooks;
object oMissing = System.Reflection.Missing.Value;
Excel.Workbook myBook = myBooks.Open(excelfilePath, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); //Excel.Workbook myBook = myExcel.Workbooks[1];
int sheetint = myBook.Worksheets.Count;//能得到sheet的數量
DataSet myDs = new DataSet();
for (int k = 1; k <= 1; k++)
{
Excel.Worksheet mySheet = (Excel.Worksheet)myBook.Worksheets[k];
int rowsint = mySheet.UsedRange.Cells.Rows.Count; //得到行數
int columnsint = mySheet.UsedRange.Cells.Columns.Count;//得到列數
System.Data.DataTable dt = new System.Data.DataTable("mytable" + k);
for (int i = 2; i <= rowsint; i++) //第一行為標題,不讀取
{
Excel.Range skoitem = (Excel.Range)mySheet.Cells[i, 1];
}
}
} 導出: public bool SaveDataGireViewtoExcel(DataGridView dgv)
{
try
{
//實例化一個Excel.Application對象
Excel.Application excel =
new Excel.Application(); //讓後台執行設置為不可見,為true的話會看到打開一個Excel,然後數據在往裡寫
excel.Visible = false; //新增加一個工作簿,Workbook是直接保存,不會彈出保存對話框,加上Application會彈出保存對話框,值為false會報錯
excel.Application.Workbooks.Add(true);
//生成Excel中列頭名稱
for (int i = 0; i < dgv.Columns.Count; i++)
{
excel.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
}
//把DataGridView當前頁的數據保存在Excel中
for (int i = 0; i < dgv.Rows.Count - 1; i++)
{
for (int j = 0; j < dgv.Columns.Count; j++)
{
if (dgv[j, i].ValueType == typeof(string))
{
excel.Cells[i + 2, j + 1] = "'" + dgv[j, i].Value.ToString();
}
else
{
excel.Cells[i + 2, j + 1] = dgv[j, i].Value.ToString();
}
}
} //設置禁止彈出保存和覆蓋的詢問提示框
excel.DisplayAlerts = false;
excel.AlertBeforeOverwriting = false; //保存工作簿
excel.Application.Workbooks.Add(true).Save();
//保存excel文件
excel.Save("D:" + "\\HBMange.xls");
//確保Excel進程關閉
excel.Quit();
excel = null;
GC.Collect(); return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "錯誤提示");
} return false;
}
② 怎麼利用c語言創建excel文件
如果數據簡單的話,可以使用CSV(逗號分隔值)格式的文件。CSV格式的文件可以用Office
Excel
打開。比如有要保存的一張表格是這樣的:
----------------表格開始-------------------
編號
姓名
性別
1
A
男
2
B
女
3
C
男
---------------表格結束--------------------
那麼在保存CSV文件裡面數據格式是這樣的:
----------------內容開始----------------
編號,姓名,性別
1,
A,
男
2,
B,
女
3,
C,
男
----------------內容結束----------------
用Excel打開是這樣的:
下面是示常式序:
#include
struct
Student
{
int
id;
char
name[10];
char
gender[3];
};
int
main(int
argc,
char
*argv[])
{
//
在程序所在目錄下面,可以看見一個名為
student.csv
的文件
FILE
*
file=fopen("student.csv","w...
}
}
fclose(file);;),%s\
struct
Student
studens[]=
{
{1,studens[i],",
男
2.h>
};:
----------------內容開始----------------
編號,
A;%s%,%s,
B;),"
int
main(int
argc,"};
int
studensAmount=sizeof(studens)/,",%s\;
return
0;%d%,studens[i];n",studens[i];男"
在程序所在目錄下面;B"男"i<,".csv
的文件
FILE
*
file=fopen(",性別
1,
C;,
男
----------------內容結束----------------
用Excel打開是這樣的;student;性別"姓名"w"studensAmount,姓名;,"
struct
Student
{
int
id;},
女
3;/stdio,"女"
char
name[10],".gender);
for(i=0;C".id,可以使用CSV(逗號分隔值)格式的文件;
int
i;sizeof(struct
Student),
char
*argv[])
{
/,可以看見一個名為
student,
};編號":
#include
<;n",
{2。比如有要保存的一張表格是這樣的,".name:
下面是示常式序。CSV格式的文件可以用Office
Excel
打開;A"},
{3,":
----------------表格開始-------------------
編號
姓名
性別
1
A
男
2
B
女
3
C
男
---------------表格結束--------------------
那麼在保存CSV文件裡面數據格式是這樣的;,",%s;
char
gender[3].csv"i++)
{
fprintf(file,"
if(file)
{
fprintf(file如果數據簡單的話
③ 在EXCEL中如何編寫程序
1、打開excel軟體,點擊左上角「文件」;
④ C語言函數和EXCEL函數
首先聲明,C語言和Excel完全不是一回事情:C語言是編程(尤其針對硬體有效的),Excel是辦公中的應用軟體(支持VBS或者宏編程)。你所看到的只是重名現象而已。不可當真,不過你不怕混淆可以方便你同時學習的時候記憶。printf:列印輸出到屏幕。scanf:從鍵盤輸入。getchar:獲得一個字元。
⑤ 怎樣用C語言編程實現循環把數據讀入到一個excel文件指定列中或者一個excel文件中的數據讀入到
最佳答案可以先用C語言格式化輸出為EXCEL可以導入的文本文件,再使用EXCEL手工導入。具體導入方法可參閱《往Excel中導入TXT文本數據的三種方法》: http://tech.sina.com.cn/s/2006-05-12/1042934532.shtml 這種方法最簡單, 但自動化程度低, 不能集成到你的C程序中去. 如果用C/C++創建EXCEL, 可以使用ADO或者ODBC. 如果用C++/ODBC, 可參閱《直接通過ODBC讀寫Excel表格文件》: http://www.vckbase.com/document/viewdoc/?id=421 還有《針對Excel表格文件操作的編程實現》: http://www.vckbase.com/document/viewdoc/?id=693 如果你的程序是用C++寫的, 推薦使用以上方法. 如果用C/ODBC, 稍微麻煩一點。我以前寫過一個,好像是根據一個C++的類改寫成C的, 時間太長, 記不得出處了. 現在給你做參考: 三個介面函數: OpenExcel(): 創建或打開Excel文件的一個工作表 AppendExcel(): 向工作表中加入數據記錄 CloseExcel(): 結束處理 main()中示例的是建立test.xls文件, 其中兩個工作表. 我這里源程序用VC6.0編譯, 得到的結果在Excel 2003中可以使用. #include <windows.h> #include <sqlext.h> #include <stdio.h> #ifdef _MSC_VER #pragma comment(lib,"odbc32.lib") #define SQLLEN SQLINTEGER #endif enum errtype { ERRORFREE, ERRACTION, XLSBUSY, TXTBUSY, TXTOPENERROR, SQLHANDLEENVERROR, SQLSETENVERROR, SQLHANDLEDBCERROR, SQLCONNECTERROR, SQLALLOCSTMTERROR, SQLCREATEERROR, SQLSELECTERROR, SQLBINDERROR } ; SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; // ------------------------------------------------------------------------------------------------------------ static void dbError( LPSTR lp, SQLSMALLINT handleType, SQLHANDLE handle) { BYTE buf[250], sqlstate[15]; SQLGetDiagRec( handleType,handle, 1, sqlstate, NULL,buf, sizeof(buf),NULL); fprintf(stderr, "%s: %s SQLSTATE=%s\n",lp, buf, sqlstate); } // ------------------------------------------------------------------------------------------------------------ static void dbCleanup() { if (hstmt != SQL_NULL_HANDLE) { SQLFreeStmt(hstmt, SQL_UNBIND); SQLFreeHandle(SQL_HANDLE_STMT,hstmt); } if (hdbc != SQL_NULL_HANDLE) { SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC,hdbc); } if (henv != SQL_NULL_HANDLE) SQLFreeHandle(SQL_HANDLE_ENV,henv); } // ------------------------------------------------------------------------------------------------------------ static void dbErrorCleanup( LPSTR lp,SQLSMALLINT handleType, SQLHENV henv,SQLHDBC hdbc,SQLHSTMT hstmt) { SQLHANDLE handle; switch (handleType) { case SQL_HANDLE_STMT: handle = hstmt; break; case SQL_HANDLE_DBC: handle = hdbc; break; default: handle = henv; } if (handle != SQL_NULL_HANDLE) dbError( lp, handleType, handle ); dbCleanup(henv, hdbc, hstmt ); } //--------------------------------------------------------- static BOOL isFileOpen(const BYTE *fileName) { HANDLE hFile; // 以非共享方式打開文件. 檢查EXCEL文件當前是否在使用中........... hFile = CreateFile(fileName,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL); if (hFile == INVALID_HANDLE_VALUE) { if (GetLastError() == ERROR_SHARING_VIOLATION) return TRUE; // 使用中 else return FALSE; // 未使用中,或者無此文件(現在可以創建) } else { CloseHandle(hFile); return FALSE; } } int OpenExcel(BYTE *szExcelName, BYTE *szSheetName, BYTE *szFieldName[], BYTE *szFieldType[], int nColCount) { SQLRETURN retcode; BYTE szSql[512], *pszSql=szSql; BYTE szdatabase[256]; int rc, i; henv = hdbc = hstmt = SQL_NULL_HANDLE; if ( isFileOpen(szExcelName) ) return XLSBUSY; // 准備環境 ------------------- retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (retcode != SQL_SUCCESS) { dbErrorCleanup( "SQLAllocHandle(ENV)",SQL_HANDLE_ENV,henv,hdbc,hstmt); return SQLHANDLEENVERROR; } retcode = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3,0); if (retcode != SQL_SUCCESS) { dbErrorCleanup( "SQLSetEnvAttr()",SQL_HANDLE_ENV,henv,hdbc,hstmt); return SQLSETENVERROR; } retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); if (retcode != SQL_SUCCESS) { dbErrorCleanup( "SQLAllocHandle(DBC)",SQL_HANDLE_ENV,henv,hdbc,hstmt); return SQLHANDLEDBCERROR; } // 與資料庫建立連接 ------------------ sprintf(szdatabase,"DRIVER=Microsoft Excel Driver (*.xls);CREATE_DB=%s;DBQ=%s;READONLY=FALSE;EXCLUSIVE=Yes;", szExcelName, szExcelName); //fprintf(stderr, "DATABASE: %s\n", szdatabase); retcode = SQLDriverConnect(hdbc, NULL, (SQLCHAR *)szdatabase, (short) (strlen(szdatabase)+1), NULL, 0, NULL, SQL_DRIVER_NOPROMPT); if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) { dbErrorCleanup( "SQLDriverConnect()",SQL_HANDLE_DBC,henv,hdbc,hstmt); return SQLCONNECTERROR; } retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc, &hstmt); if (retcode != SQL_SUCCESS) { dbErrorCleanup( "SQLAllocHandle(STMT)",SQL_HANDLE_DBC,henv,hdbc,hstmt); return SQLALLOCSTMTERROR; } // 構造執行 CREATE TABLE 語句 ---------------------- pszSql = szSql + sprintf(szSql, "CREATE TABLE %s (", szSheetName); for (i=0; i<nColCount; ++i) { if (i) *pszSql++ = ','; pszSql += sprintf(pszSql, "%s %s", szFieldName[i], szFieldType[i]); } *pszSql++ = ')'; *pszSql = '\0'; //fprintf(stderr, "STATEMENT: [%s]\n", szSql); retcode = SQLExecDirect(hstmt, szSql, SQL_NTS); if (retcode != SQL_SUCCESS) { SQLCHAR sqlState[15]; SQLGetDiagField( SQL_HANDLE_STMT, hstmt,1,SQL_DIAG_SQLSTATE,sqlState,sizeof(sqlState),NULL); if ( lstrcmpiA(sqlState,"42S01") != 0 ) { // Already existing... dbErrorCleanup( " SQLExecDirect()",SQL_HANDLE_STMT,henv,hdbc,hstmt); return SQLCREATEERROR; } } return 0; } int AppendExcel(BYTE *szSheetName, BYTE *szFieldName[], int nColCount, BYTE *szData) { int i, rc; BYTE szSql[512], *s, *p, *d, *psz; //構造 INSERT INTO 語句 -------------------------------- psz = szSql + sprintf(szSql, "INSERT INTO %s (", szSheetName); for (i=0; i<nColCount; ++i) { if (i) *psz++ = ','; psz += sprintf(psz, "%s", szFieldName[i]); } psz += sprintf(psz, ") VALUES (%s)", szData); //fprintf(stderr, "STATEMENT: %s\n", szSql); rc = (int) SQLExecDirect(hstmt, szSql, SQL_NTS); if (rc != SQL_SUCCESS) { dbError( " SQLExecDirect()",SQL_HANDLE_STMT,hstmt); } return rc; } void CloseExcel() { //fprintf(stderr, "CleanUp: henv=%08X; hdbc=%08X, hstmt=%08X.\n", henv, hdbc, hstmt); dbCleanup(); } //------------------ Test data --------------------------------------- static BYTE szExcelName[] = "Test.xls"; // Excel 文件名 static BYTE szSheetNameA[] = "名單"; // 工作表名 static BYTE *szFieldNameA[] = { "姓名", "年齡" }; // 欄位名 static BYTE *szFieldTypeA[] = { "TEXT", "NUMBER" }; // 欄位類型 static BYTE szSheetNameB[] = "日程"; // 工作表名 static BYTE *szFieldNameB[] = { "日期", "時間", "安排" }; // 欄位名 static BYTE *szFieldTypeB[] = { "TEXT", "TEXT", "TEXT" }; // 欄位類型 int main() { if (OpenExcel(szExcelName, szSheetNameA, szFieldNameA, szFieldTypeA, 2)==0) { AppendExcel(szSheetNameA, szFieldNameA, 2, "'張三',33"); AppendExcel(szSheetNameA, szFieldNameA, 2, "'李四',44"); printf("Excel文件[%s]中的工作表[%s] 操作成功.\n", szExcelName, szSheetNameA); CloseExcel(); } if (OpenExcel(szExcelName, szSheetNameB, szFieldNameB, szFieldTypeB, 3)==0) { AppendExcel(szSheetNameB, szFieldNameB, 3, "'五月三日','18:00','飯局'"); printf("Excel文件[%s]中的工作表[%s] 操作成功.\n", szExcelName, szSheetNameB); CloseExcel(); } printf(" ----- 完了."); return 0; } --------------------------------------- 有關函數的調用參數: int OpenExcel( //成功:返回0 BYTE *szExcelName, //Excel文件名 BYTE *szSheetName, //工作表名 BYTE *szFieldName[], //欄位名(數組) BYTE *szFieldType[], //欄位類型(數組) int nColCount) //欄位數 int AppendExcel( //成功:返回0 BYTE *szSheetName, //工作表名 BYTE *szFieldName[], //欄位名(數組) int nColCount, //欄位數 BYTE *szData) //數據字串 如使用圖形界面,可把#include <stdio.h> 去掉, printf/fprintf 改為用 MessageBox 提供必要的輸出信息或乾脆刪掉。
⑥ vc 如何操作 excel2003(注意一定是2003) 編程
1.製作應用軟體的時候,經常要把結果以報表的形式輸出,當前使用較為廣泛的當然是Excel表格,本文簡略介紹在VC++6.0中如何使用Excel2003的庫函數並對其進行編程。先創建一個對話框工程,命名為VCExcel。在對話框中添加一個按鈕,控制項ID為2.ID_RUNEXCEL(是不是很搞笑哇,不過沒關系,它照樣能實現強大的功能)。
再在該按鈕上添加消息BN_CLICKED,其消息映射函數為OnRunexcel(),下面工作就是要完成這個OnRunexcel()函數。在這里我們通過一個實例來說明VC是如何調用Excel2003的介面編程的。
3.要編程輸出一個如下表格。
格式如下:
1)表頭的字體為宋體,加粗,顏色為白色,底色為深藍,垂直水平居中對齊;
2)表中正文內容字體為宋體,顏色為深藍,底色為灰色,垂直水平居中對齊;
3)全部邊框,文本自動換行。
在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()語句之後加入如下代碼:
if(CoInitialize(NULL)==0)//初始化COM庫
{
AfxMessageBox("初始化COM失敗!");
exit(1);
}
在return FALSE;語句之前加入:::CoUninitialize();//釋放COM庫。
4.為了能調用Excel的介面我們打開MFC ClassWizard->Automation->Add Class->From a type library,選擇[Excel的安裝路徑]/EXCEL.exe,然後把所有的類都添加進去,頭文件為excel.h,源文件為excel.cpp。當然,你也可以只把一些比較常用的類如_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加進去,因為網上流傳的絕大部分教程都只添加這幾個類,這完全根據個人的需要。至少還要用到Interior類(設置底色),Font類(設置字體),而且這樣做又簡單又方便擴展功能,不管三七二十一全部弄進去吧!但這樣做會有一個問題,有可能產生類的名字沖突,例如本來你自己寫了一個類叫Font,當你全部添加時又再次加入了Font類,這樣就重復定義了,不過可以通過名字空間來解決這個問題。再在VCExcelDlg.cpp文件的頭部添加(如果系統已經自動添加就不要重復添加了):
#include "VCExcel.h"
#include "comdef.h"
這樣一來程序就可以自由調用EXCEL了,一切准備就緒。
5.下面先在CVCExcelDlg中添加如下成員變數,用來操控Excel應用程序、工作簿和單元格。
Range m_ExlRge;
_Worksheet m_ExlSheet;
Worksheets m_ExlSheets;
_Workbook m_ExlBook;
Workbooks m_ExlBooks;
_Application m_ExlApp;
我們利用載入Excel模板來生成要求的表格,在本工程Debug文件夾中建立一個Excel文件,命名為Template.xls。我們的OnRunexcel()代碼如下(詳見注釋):
void CVCExcelDlg::OnRunexcel()
{
// TODO: Add your control notification handler code here
//用m_ExlApp對象創建Excel2003進程
if(!m_ExlApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("創建Excel服務失敗!");
return;
}
//設置為可見
m_ExlApp.SetVisible(TRUE);
///////////////////下面得到應用程序所在的路徑///////////////////
CString theAppPath,theAppName;
char Path[MAX_PATH];
GetMoleFileName(NULL,Path,MAX_PATH);//得到應用程序的全路徑
theAppPath=(CString)Path;
theAppName=AfxGetApp()->m_pszAppName;
theAppName+=".exe";
//把最後的文件名去掉
int length1,length2;
length1=theAppPath.GetLength();
length2=theAppName.GetLength();
theAppPath.Delete(length1-length2,length2);
////////////////////////////////////////////////////////////////
CString TempPath="";
TempPath=theAppPath+"Template.xls";//EXCEL模板的路徑
m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);
m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//載入EXCEL模板
m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//載入Sheet頁面
//添加新的Sheet頁面
m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing);
//刪除第二個Sheet頁面
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);
m_ExlSheet.Delete();
//把第一個Sheet頁面的名字改變為TestSheet
m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE);
m_ExlSheet.SetName("TestSheet");
///////合並第一行單元格A1至D1//////
//載入要合並的單元格 m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")),TRUE);
m_ExlRge.Merge(_variant_t((long)0));
////////設置表格內容////////
m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//載入所有單元格
m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("數學系研究生課程統計"));
m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t("課程名"));
m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("課時"));
m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("難度"));
m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t("教學方式"));
m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t("泛函分析"));
m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t("60"));
m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)3),_variant_t("普通"));
m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)4),_variant_t("老師講課"));
m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)1),_variant_t("微分流形"));
m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)2),_variant_t("40"));
m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)3),_variant_t("變態難"));
m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)4),_variant_t("自學"));
m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)1),_variant_t("二階橢圓型方程與方程組"));
m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)2),_variant_t("60"));
m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)3),_variant_t("很難"));
m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)4),_variant_t("討論"));
m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());//載入已使用的單元格
m_ExlRge.SetWrapText(_variant_t((long)1));//設置單元格內的文本為自動換行
//設置齊方式為水平垂直居中
//水平對齊:默認=1,居中=-4108,左=-4131,右=-4152
//垂直對齊:默認=2,居中=-4108,左=-4160,右=-4107
m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108));
m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108));
///////設置整體的字體、字型大小及顏色//////
Font ft;
ft.AttachDispatch(m_ExlRge.GetFont());
ft.SetName(_variant_t("宋體"));//字體
ft.SetColorIndex(_variant_t((long)11));//字的顏色
ft.SetSize(_variant_t((long)12));//字型大小
///////////設置標題字體及顏色////////// m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")));
ft.AttachDispatch(m_ExlRge.GetFont());
ft.SetBold(_variant_t((long)1));//粗體
ft.SetSize(_variant_t((long)13));
ft.SetColorIndex(_variant_t((long)2));
CellFormat cf;
cf.AttachDispatch(m_ExlRge.GetCells());
//////////////設置底色/////////////////
Interior it;
it.AttachDispatch(m_ExlRge.GetInterior());
it.SetColorIndex(_variant_t((long)11));//標題底色
////表格內容的底色//// m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A2"),_variant_t("D5")));
it.AttachDispatch(m_ExlRge.GetInterior());
it.SetColorIndex(_variant_t((long)15));
//////////////為表格設置邊框/////////////
Range UnitRge;
CString CellName;
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
CellName.Format("%c%d",j+64,i);//單元格的名稱 UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));//載入單元格
//LineStyle=線型 Weight=線寬 ColorIndex=線的顏色(-4105為自動) UnitRge.BorderAround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtMissing);//設置邊框
}
}
//釋放對象(相當重要!)
m_ExlRge.ReleaseDispatch();
m_ExlSheet.ReleaseDispatch();
m_ExlSheets.ReleaseDispatch();
m_ExlBook.ReleaseDispatch();
m_ExlBooks.ReleaseDispatch();
//m_ExlApp一定要釋放,否則程序結束後還會有一個Excel進程駐留在內存中,而且程序重復運行的時候會出錯
m_ExlApp.ReleaseDispatch();
//退出程序 m_ExlApp.Quit();
}
⑦ c語言 excel 編程
excel 和access資料庫操作一樣 可以用ado的方式訪問資料庫 可執行增刪改查詢的所有操作
⑧ C語言怎麼操縱Excel表格
簡單的方法是通過ODBC來實現:
具體實現
一、 包含Excel文件操作類頭文件
#include "CSpreadSheet.h"
二、 新建Excel文件,並寫入默認數據
// 新建Excel文件名及路徑,TestSheet為內部表名
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray sampleArray, testRow;
SS.BeginTransaction();
// 加入標題
sampleArray.RemoveAll();
sampleArray.Add("姓名");
sampleArray.Add("年齡");
SS.AddHeaders(sampleArray);
// 加入數據
CString strName[] = {"徐景周","徐志慧","郭徽","牛英俊","朱小鵬"};
CString strAge[] = {"27","23","28","27","26"};
for(int i = 0; i < sizeof(strName)/sizeof(CString); i++)
{
sampleArray.RemoveAll();
sampleArray.Add(strName[i]);
sampleArray.Add(strAge[i]);
SS.AddRow(sampleArray);
}
SS.Commit();
三、 讀取Excel文件數據
CSpreadSheet SS("c:\\Test.xls", "TestSheet");
CStringArray Rows, Column;
//清空列表框
m_AccessList.ResetContent();
for (int i = 1; i <= SS.GetTotalRows(); i++)
{
// 讀取一行
SS.ReadRow(Rows, i);
CString strContents = "";
for (int j = 1; j <= Rows.GetSize(); j++)
{
if(j == 1)
strContents = Rows.GetAt(j-1);
else
strContents = strContents + " --> " + Rows.GetAt(j-1);
}
m_AccessList.AddString(strContents);
}