您可能需要使用以下代碼作爲起點。此代碼使用COM Interop來提取VBA腳本並執行查找替換。我用一個非常基本的腳本在密碼保護的電子表格上嘗試了這一點,它運行良好。無可否認,這是基本的,但你可能能夠提取你所需要的東西。
string filename = "Test.xls";
string password = "password";
Excel._Application app = new Excel.Application();
Excel._Workbook workbook = app.Workbooks.Open(Filename: filename, Password: password);
if (workbook.HasVBProject)
{
VBProject project = workbook.VBProject;
foreach (VBComponent component in project.VBComponents)
{
if (component.Type == vbext_ComponentType.vbext_ct_StdModule ||
component.Type == vbext_ComponentType.vbext_ct_ClassModule)
{
CodeModule module = component.CodeModule;
string[] lines =
module.get_Lines(1, module.CountOfLines).Split(
new string[] { "\r\n" },
StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].Contains("A1"))
{
lines[i] = lines[i].Replace("A1", "D1");
module.ReplaceLine(i + 1, lines[i]);
}
}
}
}
}
workbook.Save();
workbook.Close();
app.Quit();
我不會輸入此作爲答案,因爲我沒有時間投入工作以提高質量,但如果您在此處閱讀我的答案,可能會給您一些建議:http ://stackoverflow.com/questions/14491613/can-i-evaluate-an-excel-vb-constant-that-is-in-string-format/14492230#14492230 – mkingston
這是一個很好的起點!謝謝! – trailmax
沒有問題,祝你好運:)。如果你真的陷入困境,請在這裏給我評論一下,當我有機會的時候,我會對它進行破解。聽起來你可能會自己得到它,雖然! – mkingston