ฉันใช้ c# 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();
}