我该如何comapre使用C#的两个excel表单在下面的VBA代码的帮助下?
问题描述:
Dim LastRow_1 as Integer
Dim LastCol_1 as Integer
Dim Data_1 as Range
Dim LastRow_2 as Integer
Dim LastCol_2 as Integer
Dim Data_2 as Range
Dim Sh_1 as Worksheet
Dim Sh_2 as Worksheet
Dim X As Long
Dim Y As Long
Dim C_1 as Range
Dim C_2 as Range
Set Sh_1 = Activeworkbook.Sheets("Sheet1")
Set Sh_2 = Activeworkbook.Sheets("Sheet2")
LastRow_1 = Sh_1.Range("A65535").End(xlup).Row
LastCol_1 = Sh_1.Range("IV1").End(xltoLeft).Column
Set Data_1 = Sh_1.range("A1").Resize(LastRow_1,LastCol_1)
LastRow_2 = Sh_2.Range("A65535").End(xlup).Row
LastCol_2 = Sh_2.Range("IV1").End(xltoLeft).Column
Set Data_2 = Sh_2.range("A1").Resize(LastRow_2,LastCol_2)
For Each C_1 in Data_1
For Each C_2 In Data_2
If C_2 = C_1 then
'found a cell on sheet2 that matched cell in sheet1
'now do what you need to do
End if
Next C_2
Next C_1
答
你可以做这样的事情:
Excel.Application app = new Excel.Application();
app.Visible = true;
Excel.Workbooks workbooks = m_app.Workbooks;
Excel.Workbook workbook = workbooks.Open(fileName);
workbook.Activate();
Excel.Sheets sheets = workbook.Sheets;
Excel.Worksheet sheet = sheets(1);
Excel.Range range = sheet.UsedRange;
// values will be an multi dimensional array of objects
object values = range.Value;
Marshal.ReleaseComObject(range);
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(sheets);
workbook.Close(false);
Marshal.ReleaseComObject(workbook);
workbooks.Close();
Marshal.ReleaseComObject(workbooks);
app.Quit();
Marshal.ReleaseComObject(app);
这将在一张纸上阅读,那么只需调用相同的代码为其他表,然后就可以作为比较值:
AreEqual(values(1,1), values2(1, 1));
哪里AreEqual
是你写的方法是比较正常的事情占空值和数据类型等
顺便说一句,我写上面的代码为C #就像问题标题中说的那样,但是我看到标签是VB.Net,但是如果你想将它作为VB.Net使用一些转换器自动转换它,如http://www.developerfusion.com/tools/convert/vb-to-csharp/或类似。
答
将工作表的内容选择到数据表中,并且可以使用DataRelations对象来比较两个数据表。 您也可以使用两个数据表的合并来识别差异。
你的功能目标是什么? – Glennular 2010-05-20 14:57:07