例如,我有一張名爲EmployeeSheet的工作表,它只是公司中每個員工姓名的第一個和最後一個單個列。假設這個列表格式完全格式化並且沒有重複項,因此每個單元格在此表單中都是唯一的。如何以編程方式在多個工作表中找到Excel單元格中的重複值
現在我在公司各部門的紙張,如FinanceSheet,ITSheet和SalesSheet。每個表單都有一個位置(因爲每個表單中沒有相同的佈局)每個部門的員工列表。但是,任何1個員工名稱應該只在所有部門表單之間出現一次(這不包括EmployeeSheet)。
下面是我能想到的解決方案,但不知道如何實現,將是製作一個多維數組(在學校學習了一點,依稀記得如何使用)。
僞像:
arrEmployees = {"Tom Hanks", "Burt Reynolds", "Your Mom"}
arrFinance = {"Tom Hanks"}
arrIT = {"Burt Reynolds"}
arrSales = {"Your Mom"}
arrSheets = {arrEmployees, arrFinance, arrIT, arrSales}
雖然我已經能夠通過使用
Sheets shts = app.Worksheets;
Worksheet ws = (Worksheet)sheets.get_Item("EmployeeSheet");
Excel.Range empRange = (Excel.Range)worksheet.get_range("B2");
string empVal = empRange.Value2.ToString();
但與該進程得到單細胞值和範圍爲字符串獲得一個單元格的值一個字符串,我不知道如何將它放到我的數組元素中,更不用說一系列的值。
我敢肯定我的方法不是最有效率的,甚至不可能,但這就是爲什麼我在這裏尋求幫助,所以任何提示都表示讚賞。
編輯:這是最終爲我工作的解決方案。感謝Ian Edwards解決方案。
Dictionary<string, List<Point>> fields = new Dictionary<string, List<Point>>();
fields["Finance"] = new List<Point>() { new Point(2,20)};
fields["Sales"] = new List<Point>();
for (int row = 5; row <= 185; row += 20) {fields["Sales"].Add(new Point(2,row));}
List<string> names = new List<string>();
List<string> duplicates = new List<string>();
foreach (KeyValuePair<string, List<Point>> kp in fields)
{
Excel.Worksheet xlSheet = (Excel.Worksheet)workbook.Worksheets[kp.Key];
foreach (Point p in kp.Value)
{
if ((xlSheet.Cells[p.Y, p.X] as Excel.Range.Value != null)
{
string cellVal = ((xlSheet.Cells[p.Y,p.X] as Excel.Range).Value).ToString();
if (!names.Contains(cellVal))
{ names.Add(cellVal)) }
else { duplicates.Add(cellVal); } } } }
我有一個工作表,我想檢查一列和任何重複只出現在那一列中? – Si8