数据不能写入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; } } 

我testing了这个,它的工作原理。

 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; } } 

这段代码…

 worksheet.Cells[1, 1] 

…返回一个Range对象。 您需要设置此对象的Value2属性来更改单元格的内容:

 var cell = worksheet.Cells[1, 1]; cell.Value2 = contact.Firstname; 

请参阅: Microsoft.Office.Interop.Excel._Worksheet.Cells
并且: Microsoft.Office.Interop.Excel.Range.Value2

请注意,我已经非常小心, 不要在上面的例子中使用两个点 !

我想补充一点,你需要小心这种代码。 在使用互操作性时,你需要做更多的内存pipe理。 尝试在使用它们之前始终声明对象,然后清除它们。 在你的互操作代码中不要超过2(。)(例如object1.object2.value)

这将使:

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

完成后:

 Marshal.ReleaseComObject(_range);