c# - 将 List<string> 写入 Excel.Range

标签 c# excel

我有以下 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 范围。

最佳答案

这里有一些起始代码可以满足您的需求,它可能会被改进。

您的主要“问题”是从多维数组( object[,] cellValues = (object[,])excelRange.Value; )到 List<string> 的转换。 - 如果您可以以某种方式将其保留为多维数组,那么这将有助于您的“设置”代码 - 这取决于您的其他代码正在做什么。

当您想要将更改“设置”回来时,我展示了两种方法:

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

  • 或者提前提供一个多维值数组并获取一次性使用它们的范围

这里:

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

关于c# - 将 List<string> 写入 Excel.Range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43342966/

相关文章:

excel - 将 Excel 保存为 csv,使用逗号分隔符而不是分号

c# - 在 NAS 文件管理器上安全地复制文件

c# - Realm :自增主键

c# - anchor 标记在 Gridview 中不起作用

.net - 用 VBA 实现无限及超越

excel - MS Access Nz() 函数无法在 MS Excel 中识别

c# - WPF - 折线/路径周围的 HitTest 半径

c# - 将 UWP 库加载到 .NET Framework 应用中

excel - 需要循环遍历列范围、检查值是否存在然后复制单元格的代码

excel - 如何使用 for next 使宏更短