【发布时间】:2015-09-25 14:57:48
【问题描述】:
例如,我有一个名为 EmployeeSheet 的工作表,它只是公司中每个员工姓名的第一列和最后一位。让我们假设这个列表格式完美并且没有重复,所以每个单元格在这张表中都是唯一的。
现在我有一个公司每个部门的工作表,例如 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); } } } }
【问题讨论】:
标签: c# arrays excel office-interop