2011-10-03 71 views
1

我對微軟的interop庫有些困惑。看起來並不是那麼直觀,我想如果他們堅持使用多維數組,這將會是一個更好的庫。儘管如此,我對如何使用C#寫入列有點困惑。我將如何遍歷單個列並將數據放入每個單獨的列中。更好的問題是,我如何循環訪問excel中的單個excel列。我基本上試圖循環遍歷列,並基於第一列中的值將數據添加到其他列。我會把所有的數據都拉出來放進某種數據結構(最可能是一個數組)中,然後將其重新設置爲Range或類似的東西?有點困惑。下面是我用它來創建我需要,我是從同一行中其他列獲取數據來填充新列碼...使用C寫入excel中的新列使用C#

public static void setUpSheet(Worksheet wkSheet) 
    { 
     Range rng = (Range)wkSheet.get_Range("A1", Type.Missing); 
     rng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight, 
           XlInsertFormatOrigin.xlFormatFromRightOrBelow); 
     wkSheet.Range["A1", Type.Missing].Value2 = "R_EMPIID"; 

     Range rng2 = (Range)wkSheet.get_Range("A1", Type.Missing); 
     rng2.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight, 
           XlInsertFormatOrigin.xlFormatFromRightOrBelow); 
     wkSheet.Range["A1", Type.Missing].Value2 = "PopulationID"; 

     Range rng3 = (Range)wkSheet.get_Range("A1", Type.Missing); 
     rng3.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight, 
           XlInsertFormatOrigin.xlFormatFromRightOrBelow); 
     wkSheet.Range["A1", Type.Missing].Value2 = "PopPatID"; 

     wkSheet.SaveAs("C:\\CorrectDirectory\\App_Data\\test", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);    
    } 

所以我可以添加一個新列,並命名列,現在我只需要弄清楚如何從其他列中獲取正確的數據並將它們放在該行的另一列(這些列將是我剛創建的新列)。有任何想法嗎?

UPDATE:想更具體 我知道你可以得到一個數值範圍在Excel列。但是沒有辦法知道數據集有多大。例如,

(Excel.Range)excelWorksheet.get_Range("A5:A35", Type.Missing); 

這將爲您帶來一系列帶有數據的列。但是,可以說你沒有看過excel文件。如果你不知道有多少行,你將如何循環通過所有該列中的行?或者你應該做一個捕獲所有,只是做.get_Range(A2:A10000,Type.Missing)。然後,如何改變完全相同的行,但在不同的列?

+1

僅供參考,語言被命名爲「C#」,而不是「CSHARP」。 –

+3

這是真的。拼音寫出我希望的符號沒有錯? – SoftwareSavant

+0

是否有理由拼寫某些東西而不是正確地拼寫? –

回答

1

我認爲處理映射最簡單的方法是創建一個函數,將基於0的整數列映射到Excel列名:例如。 0,1,2 ...... 26,27,28 => A,B,C ... AA,AB,AC。 (您可能需要也可能不需要反向映射)。

它當時很容易,因爲你知道任何單元格地址<字母> <數字>成爲> <列> <行創建單元格地址和行/列索引之間的映射功能。

這是一個額外的工作,他們沒有提供基於索引的範圍,但如果你開始做先進的公式,你會做這個映射。

----編輯的基礎上更新的問題-----

我相信Worksheet.Cells.WidthWorksheet.Cells.Height可能是一些用在這裏。工作表可能包含很多空單元,但它至少應該是一個起點。

注:我在看的類型LIB的12版本,不知道你是什麼版本的?

+0

我不會爲這個特定的項目使用高級公式,但我會記住這一點,如果我被迫再次做這樣的事情。 – SoftwareSavant

+0

@DmainEvent請參閱上面的編輯。 – 2011-10-03 21:02:35

+0

我正在嘗試使用版本12。 – SoftwareSavant