2013-08-23 91 views
0

我寫了代碼來讀取excel文件。當我添加聯繫人值時,我需要將這些值寫入Excel文件,但問題是這些值無法寫入Excel文件中的單元格。空白!!!!爲什麼?我的代碼有什麼問題?數據不能寫入excel文件

static void Main(string[] args) 
    { 

     var contacts = new List<Contact>(); 

     contacts.Add(new Contact{Firstname = "name 1", Lastname = "lastname 1", Email = "email 1", PhoneNumber = "phone 1"}); 
     contacts.Add(new Contact { Firstname = "name 2", Lastname = "lastname 2", Email = "email 2", PhoneNumber = "phone 2" }); 

     Application app = new Application(); 
     // excelapp.Visible = true; 


     // _Workbook workbook = (_Workbook)(excelapp.Workbooks.Add(Type.Missing)); 
     Workbook workbook = app.Workbooks.Open(@"N:\files\transform_results.xlsx"); 
     _Worksheet worksheet = workbook.Sheets["Sheet1"]; 
     Range xlRange = worksheet.UsedRange; 
     worksheet = (_Worksheet)workbook.ActiveSheet; 


     worksheet.Cells[1, 1] = "First Name"; 
     worksheet.Cells[1, 2] = "Last Name"; 
     worksheet.Cells[1, 3] = "Email"; 


     int row = 4; 

     foreach (var contact in contacts) 
     { 


      worksheet.Cells[1, 1] = contact.Firstname; 
      worksheet.Cells[1, 2] = contact.Lastname; 
      worksheet.Cells[1, 3] = contact.Email; 
      worksheet.Cells[1, 4] = contact.PhoneNumber; 
     } 

     app.UserControl = true; 
    } 

public class Contact 
{ 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
    public string Email { get; set; } 
    public string PhoneNumber { get; set; } 
} 

回答

3

我測試了這個,它的工作原理。

static void Main(string[] args) 
{ 
    var contacts = new List<Contact>(); 

    contacts.Add(new Contact { Firstname = "name 1", Lastname = "lastname 1", Email = "email 1", PhoneNumber = "phone 1" }); 
    contacts.Add(new Contact { Firstname = "name 2", Lastname = "lastname 2", Email = "email 2", PhoneNumber = "phone 2" }); 

    Excel.Application app = new Excel.Application(); 
    app.Visible = true; 
    var workbook = app.Workbooks.Open(@"C:\testit.xlsx"); 
    _Worksheet worksheet = workbook.Sheets["Sheet1"]; 
    Range xlRange = worksheet.UsedRange; 
    worksheet = (_Worksheet)workbook.ActiveSheet; 

    worksheet.Cells[1, 1] = "First Name"; 
    worksheet.Cells[1, 2] = "Last Name"; 
    worksheet.Cells[1, 3] = "Email"; 

    int row = 4; 

    foreach (var contact in contacts) 
    { 
     row++; 

     worksheet.Cells[row, 1] = contact.Firstname; 
     worksheet.Cells[row, 2] = contact.Lastname; 
     worksheet.Cells[row, 3] = contact.Email; 
     worksheet.Cells[row, 4] = contact.PhoneNumber; 
    } 

    app.UserControl = true; 
    app.Quit(); 

} 

public class Contact 
{ 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
    public string Email { get; set; } 
    public string PhoneNumber { get; set; } 
} 
+0

但是文件路徑呢?我需要閱讀文件 – user235973457

+0

你的似乎是唯一正確的答案:)(你有一個+1)。但你應該突出問題。 – varocarbas

+0

@ user235973457你的代碼寫得很好,但你看不到它,因爲你沒有保存這些更改,也沒有顯示電子表格(也是你的循環錯誤)。如果你使用app.Visible = true;如此答案所示,您會看到單元格正在填充。最後,您還應該添加workbook.Save()。 – varocarbas

0

我想補充一點,你需要小心這種類型的代碼。 使用互操作性時,您需要進行更多的內存管理。 嘗試在使用它們之前始終聲明對象,然後清除它們。 儘量不要有2點多在互操作代碼(例如object1.object2.value)

這將使(。):

Microsoft.Office.Interop.Excel.Range _range; 
_range = worksheet.get_Range("A1", "A1"); 
_range.Value2 = contact.Firstname; 

而且完成時:

Marshal.ReleaseComObject(_range);