写一个List <string>到Excel.Range

我有以下的excel范围:

workSheet.Range[workSheet.Cells[12, 2], workSheet.Cells[5000, 2]] 

我已经把这个excel范围转换成列表,并在列表上执行一些数据操作。

 object[,] cellValues = (object[,])inputRng.Value2; List<string> lst = cellValues.Cast<object>().ToList().ConvertAll(x => Convert.ToString(x)); 

我想将列表分配回Excel范围。

这里有一些你想要的开始代码,它可能会被改进。

你的主要问题是你从multidimensional array( object[,] cellValues = (object[,])excelRange.Value; )转换成List<string> – 如果你能以某种方式保持这个multidimensional array,会帮助你“设置”代码 – 这取决于你的其他代码在做什么。

当你想“设置”你的变化,我已经显示了两种方式来做到这一点:

  • 或者迭代单元格(范围)并设置每个值

  • 或提前提供一个multidimensional array值,并获得一次性使用它们的范围

这里:

  using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.Office.Interop.Excel; namespace WindowsFormsApplication10 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // Create starting spreadsheet Microsoft.Office.Interop.Excel.Application excelApp; Microsoft.Office.Interop.Excel.Workbook excelWorkbook; Microsoft.Office.Interop.Excel.Worksheet excelWorksheet; excelApp = new Microsoft.Office.Interop.Excel.Application(); excelApp.Visible = true; excelWorkbook = excelApp.Workbooks.Add(); excelWorksheet = excelWorkbook.Sheets.Add(); excelWorksheet.Activate(); Microsoft.Office.Interop.Excel.Range excelRange = excelWorksheet.Range[excelWorksheet.Cells[12, 2], excelWorksheet.Cells[5000, 2]]; // Turn off updating to make it faster excelApp.ScreenUpdating = false; // Set some initial data int i = 1; foreach (Microsoft.Office.Interop.Excel.Range cell in excelRange.Cells) { cell.Value = i; i++; } // Get the data from those cells as a list of strings object[,] cellValues = (object[,])excelRange.Value; List<string> lst = cellValues.Cast<object>().ToList().ConvertAll(x => Convert.ToString(x)); // Modify the strings in some way for (int l = 0; l < lst.Count; l++) { lst[l] = lst[l] + "modified"; } // Here are some different ways set the "cells" back // Set the cells back with the changes //------------------------------------ // Option 1: using a multidimensional array /* object[,] cellValuesToWrite = new string[excelRange.Rows.Count, excelRange.Columns.Count]; int z = 0; foreach (string str in lst) { cellValuesToWrite[z,0] = lst[z]; z++; } excelRange.Value2 = cellValuesToWrite; */ // Option 2: iterating the range of cells and "setting" the value /* int z = 0; foreach (Microsoft.Office.Interop.Excel.Range cell in excelRange.Cells) { cell.Value = lst[z]; z++; } excelRange.Value2 = lst; */ // Turn updating back on excelApp.ScreenUpdating = true; } } }