當前位置:首頁 » 操作系統 » excel編程源碼

excel編程源碼

發布時間: 2022-08-20 18:39:04

Ⅰ 如何破解excel用戶自定義函數的源代碼

新建一個Excel工作簿,Alt+F11 打開VBA編輯器,新建一個模塊 ,復制以下代碼,注意如提示變數未定義,則把Option Explicit行刪除即可,經測試已經通過.
'移除VBA編碼保護
Sub MoveProtect()
Dim FileName As String
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
If FileName = CStr(False) Then
Exit Sub
Else
VBAPassword FileName, False
End If
End Sub
'設置VBA編碼保護
Sub SetProtect()
Dim FileName As String
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
If FileName = CStr(False) Then
Exit Sub
Else
VBAPassword FileName, True
End If
End Sub
Private Function VBAPassword(FileName As String, Optional Protect As Boolean = False)
If Dir(FileName) = "" Then
Exit Function
Else
FileCopy FileName, FileName & ".bak"
End If
Dim GetData As String * 5
Open FileName For Binary As #1
Dim CMGs As Long
Dim DPBo As Long
For i = 1 To LOF(1)
Get #1, i, GetData
If GetData = "CMG=""" Then CMGs = i
If GetData = "[Host" Then DPBo = i - 2: Exit For
Next

If CMGs = 0 Then
MsgBox "請先對VBA編碼設置一個保護密碼...", 32, "提示"
Exit Function
End If

If Protect = False Then
Dim St As String * 2
Dim s20 As String * 1

'取得一個0D0A十六進制字串
Get #1, CMGs - 2, St

'取得一個20十六制字串
Get #1, DPBo + 16, s20

'替換加密部份機碼
For i = CMGs To DPBo Step 2
Put #1, i, St
Next

'加入不配對符號
If (DPBo - CMGs) Mod 2 <> 0 Then
Put #1, DPBo + 1, s20
End If
MsgBox "文件解密成功......", 32, "提示"
Else
Dim MMs As String * 5
MMs = "DPB="""
Put #1, CMGs, MMs
MsgBox "對文件特殊加密成功......", 32, "提示"
End If
Close #1
End Function

Ⅱ VB 操作EXCEL 源碼

'工程-引用-Microsoft Excel Object library(勾選此項)
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
'寫文件
Private Sub Command1_Click()
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add '新建EXCEL工件簿文件
Set xlSheet = xlBook.Worksheets(1)
For i = 1 To 10 '10行
For j = 1 To 10 '10列
xlSheet.Cells(i, j) = i * j
Next j
Next i
xlSheet.SaveAs "d:\test.xls" '按指定文件名存檔
xlApp.Quit '結束EXCEL對象
Set xlApp = Nothing '釋放xlApp對象
End Sub
'讀文件
Private Sub Command2_Click()
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Application.Workbooks.Open("d:\test.xls")
Set xlSheet = xlBook.Worksheets(1)
Dim s As String
For i = 1 To 10 '讀取10行
For j = 1 To 10 '讀取10列
s = s & xlSheet.Cells(i, j) & Space(5)
Next j
s = s & vbNewLine '另起一行
Next i
Print s
xlApp.Quit '結束EXCEL對象
Set xlApp = Nothing '釋放xlApp對象
End Sub

兩個命令按鈕,先寫文件,再讀出來輸出到窗體,最簡單的讀寫操作。

Ⅲ Excel VBA高手請進,求源代碼

參考下面處理

Excel數據批量轉置(二列轉多列)

Ⅳ 需要一個用vba寫的完整EXCEL源碼!

已經發到了你的郵箱,好的話就加分哦!
我的郵箱:[email protected]
我重新發了EXCEL版的VBA,你看下。

Ⅳ 求excel中sum函數源代碼

問題有點復雜化!
其實,能理解函數語法即可。如:
SUM(number1,number2,
...)
其中,Number1,
number2,
...

1

30
個需要求和的參數。
函數源代碼是計算機編程語言。如:
假設函數:=SUM(A1:A100)
用VBA
編寫的就是(在B1得出求和結果):
Sub
Macro()
Sheet1.[B1]
=
Application.Sum(Sheet1.[A1:A100])
End
Sub
是不是要這樣?

Ⅵ 如何用excel編程

基本思路

基礎實現方法同上篇文章《直接通過ODBC讀、寫Excel表格文件》相同,都是通過ODBC來把Excel表格文件當成資料庫文件來進行讀、寫等操作,所以在Excel表格文件中寫入的行頭名必須是唯一的(不要重名,相當於資料庫中的ID值)。本文中對Excel文件的操作都被封裝進一個類CSpreadSheet中,通過它我們可以非常簡便的實現各種Excel表格數據操作,並且可以對該類進行擴充來滿足自己的需求。

具體實現

一、 包含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);

}

四、 對已存在Excel表格數據進行添加、插入、替換操作

// 初始化測試行數據,進行添加、插入及替換數據操作演示

for (int k = 1; k <= 2; k++)

{

testRow.Add("Test");

}

SS.AddRow(testRow); // 添加到尾部

SS.AddRow(testRow, 2); // 插入新行到第二行

SS.AddRow(testRow, 6, true); // 替換原第四行來新的內容

SS.AddCell("徐景周", 1,2); // 添加(不存在)或替換(存在)第二行,第一列單元格內容

SS.Commit();

五、 對已存在Excel表格數據進行行、列、單元格查詢

void CExcelAccessDlg::OnQuery()

{

CSpreadSheet SS("c:\Test.xls", "TestSheet");

CStringArray Rows, Column;

CString tempString = "";

UpdateData();

if(m_strRow == "" && m_strColumn == "") // 查詢為空

{

AfxMessageBox("行號、列號不能同時為空!");

return;

}

else if(m_strRow == "" && m_strColumn != "") // 查詢指定列數據

{

int iColumn = atoi(m_strColumn);

int iCols = SS.GetTotalColumns();

if(iColumn > iCols) // 超出表范圍查詢時

{

CString str;

str.Format("表中總列數為: %d, ", iCols);

AfxMessageBox(str + " 查詢列數大於Excel表中總列數,請重新輸入!");

return;

}

// 讀取一列數據,並按行讀出

if(!SS.ReadColumn(Column, iColumn))

{

AfxMessageBox(SS.GetLastError());

return;

}

CString tmpStr;

for (int i = 0; i < Column.GetSize(); i++)

{

tmpStr.Format("行號: %d, 列號: %d ,內容: %s ", i+1,iColumn,Column.GetAt(i));

tempString += tmpStr;

}

AfxMessageBox(tempString);

}

else if(m_strRow != "" && m_strColumn == "") // 查詢指定行數數據

{

int iRow = atoi(m_strRow);

int iRows = SS.GetTotalRows();

if(iRow > iRows) // 超出表范圍查詢時

{

CString str;

str.Format("表中總行數為: %d, ", iRows);

AfxMessageBox(str + " 查詢行數大於Excel表中總行數,請重新輸入!");

return;

}

// 讀取指定行數據

if(!SS.ReadRow(Rows, iRow))

{

AfxMessageBox(SS.GetLastError());

return;

}

CString tmpStr;

for (int i = 0; i < Rows.GetSize(); i++)

{

tmpStr.Format("行號: %d, 列號: %d ,內容: %s ", iRow, i+1, Rows.GetAt(i));

tempString += tmpStr;

}

AfxMessageBox(tempString);

}

else if(m_strRow != "" && m_strColumn != "") // 查詢指定單元格數據

{

int iRow = atoi(m_strRow), iColumn = atoi(m_strColumn);

int iRows = SS.GetTotalRows(), iCols = SS.GetTotalColumns();

if(iColumn > iCols) // 超出表范圍查詢時

{

CString str;

str.Format("表中總列數為: %d, ", iCols);

AfxMessageBox(str + " 查詢列數大於Excel表中總列數,請重新輸入!");

return;

}

else if(iRow > iRows)

{

CString str;

str.Format("表中總行數為: %d, ", iRows);

AfxMessageBox(str + " 查詢行數大於Excel表中總行數,請重新輸入!");

return;

}

// 讀取指定行、列單元格數據

if(!SS.ReadCell(tempString, iColumn, iRow))

{

AfxMessageBox(SS.GetLastError());

return;

}

CString str;

str.Format("行號: %d, 列號: %d ,內容: %s", iRow,iColumn,tempString);

AfxMessageBox(str);

}

}

六、 將存在的Excel轉換另存為指定分隔的文本文件

// 將原Excel文件轉換為用分號分隔的文本,並另存為同名文本文件

SS.Convert(";");

七、 刪除Excel中表格

SS. DeleteSheet(); // 刪除Excel文件中所有表格

SS. DeleteSheet(" TestSheet "); // 刪除Excel中TextSheet表格

八、 獲取Excel中總行數、總列數、當前行

int iCols = SS.GetTotalColumns(); // 總列數

int iRows = SS.GetTotalRows(); // 總行數

int iCurRow = SS.GetCurrentRow(); // 當前所在行號

九、 獲取行頭數據

CStringArray rowHeader;

SS.GetFieldNames(rowHeader);

CString tmpStr;

for (int i = 0; i < rowHeader.GetSize(); i++)

{

tmpStr.Format("行號: %d, 列號: %d ,內容: %s ", 1, i+1, rowHeader.GetAt(i));

tempString += tmpStr;

}

AfxMessageBox(tempString);

最後,如果想知道詳細實現細節的話,可以在下載示例源碼後,仔細查看源碼既可(內有詳細注釋)。

Ⅶ 求EXCEL源代碼

sheet1的I2輸入公式
=IF(L2="","",INDEX(Sheet2!A:A,MATCH(L2,Sheet2!B:B)))
下拉即可

Ⅷ excel計時器源代碼

這要用到VBA
...

dim t

t=timer

...

msgbox "總運行時間為" & timer-t

...
Visual Basic for Applications(VBA)是Visual Basic的一種宏語言,是微軟開發出來在其桌面應用程序中執行通用的自動化(OLE)任務的編程語言。主要能用來擴展Windows的應用程式功能,特別是Microsoft Office軟體。也可說是一種應用程式視覺化的Basic 腳本。該語言於1993年由微軟公司開發的的應用程序共享一種通用的自動化語言--------Visual Basic For Application(VBA),實際上VBA是寄生於VB應用程序的版本。微軟在1994年發行的Excel5.0版本中,即具備了VBA的宏功能。

Ⅸ 求C++對Excel的操作代碼,謝謝

通過VC實現對Excel表格的操作的方法有多種,如:通過ODBC資料庫實現,通過解析Excel表格文件,通過OLE/COM的實現。本文主要研究通過OLE/COM實現對Excel表格的操作。

本文源碼的應用環境說明:
Windows XP SP3
Microsoft Visual Studio 2010
Microsoft Office Excel 2007

1、添加OLE/COM支持。
首先,應用程序必須添加對OLE/COM的支持,才能導入OLE/COM組件。
本文使用的是MFC對話框程序,在創建工程的向導中選中Automation選項即可為程序自動添加相應的頭文件和OLE庫初始化代碼。
通過查看源代碼,可以知道在stdafx.h的頭文件中,添加了OLE/COM很多類所需添加的頭文件。
#include<afxdisp.h> // MFC 自動化類
同時,在應用程序類的InitInstance函數中,添加了OLE/COM的初始化代碼,如下所示:
// 初始化 OLE 庫
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}

2、導入並封裝Excel中的介面
Excel作為OLE/COM庫插件,定義好了各類交互的介面,這些介面是跨語言的介面。VC可以通過導入這些介面,並通過介面來對Excel的操作。
由於本文只關心對Excel表格中的數據的讀取,主要關注幾個_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range等幾個介面。Excel的各類介面的屬性、方法可以通過MSDN的OfficeDevelopment進行查詢。
VS2010導入OLE/COM組件的介面的步驟為:Project->Class Wizard->Add Class->MFC Class FromTypeLib,先選擇要導入的組件所在的路徑,即Excel.exe所在的路徑,然後再選擇
要導入的Excel類型庫中的介面。
在完成介面導入後,VS2010將自動為導入的介面創建相應的實現類,用於對介面屬性和方法的實現。由於標準的C++沒有屬性訪問器,只能添加一個兩個存取函數來實現對屬性的訪問,通過在屬性名稱前加上get_和put_前綴分別實現對屬性的讀寫操作。即,由VC自動完成C++類對介面的封裝。

本文所導入的介面對應的類和頭文件的說明如下所示:

Excel介面

導入類

頭文件

說明

_Application

CApplicaton

Application.h

Excel應用程序。

Workbooks

CWorkbooks

Workbooks.h

工作簿的容器,裡麵包括了Excel應用程序打開的所有工作簿。

_Workbook

CWorkbook

Workbook.h

單個工作簿。

Worksheets

CWorksheets

Worksheets.h

單個工作簿中的Sheet表格的容器,包括該工作簿中的所有Sheet。

_Worksheet

CWorksheet

Worksheet.h

單個Sheet表格。

Range

CRange

Range.h

一定數量的單元格,可對單元格進行單個或多個單元格進行操作。

3、導入Excel的整個類型庫
介面對應類只是對介面的屬性和方法進行了封裝,而Excel中的數據類型,如枚舉類型卻並為並不能使用,因此,為了更方便的操作Excel,還需要導入Excel的數據類型。
通過查看導入介面對應的頭文件可以發現,在所有導入介面的頭文件中,都會有這么行:
#import "D:\\Program Files\\MicrosoftOffice\\Office12\\EXCEL.EXE" no_namespace
這行代碼的作用是導入Excel整個類型庫到工程中。
由VS2010自動產生的導入代碼存在以下幾個問題:
(1)如果導入了多個介面,每個頭文件都會把類型庫導入一次,如果引用多個頭文件,會導致類型庫重復導入。
(2)Excel類型庫中有些類型會跟MFC類庫的某些類型沖突。
(3)Excel類型庫的某些類型跟其他Office和VB的某些庫相關,如果不導入相關庫,將導致這些類型無法使用。。
以上三點問題的解決方法如下:
(1)僅在_Application介面對應頭文件中導入Excel類型庫。
(2)對沖突的類型進行重命名。
(3)在導入Excel類型庫之前,先導入Office和VB的相關庫。
更改後的導入類型庫的代碼如下:

/*導入Office的類型庫*/
#import "C:\\Program Files\\Common Files\\MicrosoftShared\\OFFICE12\\MSO.DLL" \
rename("RGB", "MSORGB")\
rename("DocumentProperties","MSODocumentProperties")
using namespace Office;

/*導入VB的類型庫*/
#import "C:\\Program Files\\Common Files\\MicrosoftShared\\VBA\\VBA6\\VBE6EXT.OLB"
using namespace VBIDE;

/*導入Excel的類型庫*/
#import "D:\\Program Files\\MicrosoftOffice\\Office12\\EXCEL.EXE" \
rename("DialogBox","ExcelDialogBox") \
rename("RGB","ExcelRGB") \
rename("CopyFile","ExcelCopyFile") \
rename("ReplaceText","ExcelReplaceText") \
no_auto_exclude
Using namespace Excel;

編譯程序後,會在Debug或Release目錄下生成三個文件mso.tlh、vbe6ext.tlh和excel.tlh。通過打開文件可知,該三個文件的命名空間分別是Office、VBIDE和Excel。導入了Excel的整個類型庫後,就可以使用Excel中的所有類型了。

4、操作Excel步驟
操作Excel的主要步驟如下:
(1)創建一個Excel應用程序。
(2)得到Workbook的容器。
(3)打開一個Workbook或者創建一個Workbook。
(4)得到Workbook中的Worksheet的容器。
(5)打開一個Worksheet或者創建一個WorkSheet。
(6)通過Range對WorkSheet中的單元格進行讀寫操作。
(7)保存Excel。
(8)釋放資源。

5、批量處理Excel表格
VC通過OLE/COM操作Excel,是通過進程間的組件技術。因此,每次讀寫Excel中的單元格時,都要進行進程間的切換。當數據量大,如果一個單元格一個單元格的讀取,主要的時間都花費在進程切換中。因此讀取多個單元格,將可有效的提高程序的運行效率。
對多個單元格的讀寫操作可以通過CRange中以下兩個成員函數來完成。
VARIANT get_Value2();
voidput_Value2(VARIANT& newValue);
其中,輸入參數newValue只要輸入一個二維數組,即可實現向Excel中一次寫入多個單元格的值。
其中,VARIANT中實現二維數據的方法可參考
http://www.cnblogs.com/xianyunhe/archive/2011/09/13/2174703.html
當然,在對CRange類進行操作之前,要設置CRange類對應的單元格。

6、Excel表格的保存
(1)如果要保存打開的工作簿,使用CWorkbook類的Save函數就可以保存工作簿,原文件將被覆蓋。
(2)如果是新創建的工作簿,或者是要另存為,可使用CWorkbook類的SaveAs函數。
SaveAs的參數比較多。其中,第1個參數是設置要保存文件的路徑;第2個參數是設置文件的格式,可在MSDN中查看枚舉類型XlFileFormat來了解Excel的文件格式。經過測試,在本文所用的測試環境中,Excel2003的文件格式是xlExcel8,Excel2007的文件格式是xlExcel4。

7、獲取當前Excel的版本
可以通過CApplication的get_Version函數來獲得Excel的版本,其中,Excel2007的主版本號是12,Excel2003的主版本號是11。

Ⅹ excel vba程序源碼,本人小白,,求大神解釋!

你確定你的程序是完整的嗎?
tmp、riqi都沒賦值就拿來用了

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:525
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:24
linux485 發布:2025-07-05 14:38:28 瀏覽:304
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:754
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:430
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:695
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:239
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:684
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:282
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:833