Я использую С# 4.0 и читаю с одного листа Excel и получаю значения из каждого столбца, а на другом листе я пишу только отдельные значения для каждого столбца.
т.е. если в протоколе результатов есть:
COLA COLB COLC
----- ------- -------
dog cow rabbit
cat moose hare
dog moose bunny
bird yak hare
fish fox
bunny
weasel
fox
bunny
тогда должен быть отдельный лист (порядок в каждом столбце не важен):
COLA COLB COLC
----- ------- -------
dog cow rabbit
cat moose hare
bird yak weasel
fish fox
bunny
Может ли кто-нибудь предложить более простой способ (все еще использующий com interop excel), который сводит на нет необходимость использования этой уродливой комбинации массива 2d-объектов, arraylist, списка обратно в array.etc.
Это мой незавершенный код, похоже, я иду в неправильном направлении:
for (int c = 0; c < num_of_cols; c++)
{
string colref = NumToLetter(c + 1);
int lastRow = workbook.Sheets["Results"].Cells[workbook.Sheets["Results"].Rows.Count, colref].End(MSExcel.XlDirection.xlUp).Row;
MSExcel.Range excelRange = workbook.Sheets["Results"].Range[colref + "2:" + colref + lastRow];
object[,] valueArray = (object[,])excelRange.get_Value(MSExcel.XlRangeValueDataType.xlRangeValueDefault);
List<ArrayList> distinctList = new List<ArrayList>();
for (int index = 0; index < num_of_cols.Length; index++)
distinctList.Add(new ArrayList());
for (int i = 1; i <= valueArray.GetUpperBound(0); i++)
{
if (valueArray[i, 1] != null)
{
if (!distinctList[c].Contains(valueArray[i, 1].ToString()))
distinctList[c].Add(valueArray[i, 1].ToString());
}
}
var startCell = (MSExcel.Range)distinctVals_worksheet.Cells[1, c + 1];
var endCell = (MSExcel.Range)distinctVals_worksheet.Cells[distinctList[c].Count,c + 1];
var writeRange = distinctVals_worksheet.Range[startCell, endCell];
writeRange.Value2 = distinctList[c].ToArray();
}