Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中使用Excel将单元格值传输到二维字符串数组_C#_Excel_Multidimensional Array_Vba - Fatal编程技术网

在C#中使用Excel将单元格值传输到二维字符串数组

在C#中使用Excel将单元格值传输到二维字符串数组,c#,excel,multidimensional-array,vba,C#,Excel,Multidimensional Array,Vba,我需要有人创建一个方法,将得到我的excel电子表格中的所有单元格值到一个二维数组 我正在使用C#中的色带制作Excel,但我就是无法让它工作 private string[,] GetSpreadsheetData () { try { Excel.Application exApp = Globals.TSExcelAddIn.Application as Excel.Application;

我需要有人创建一个方法,将得到我的excel电子表格中的所有单元格值到一个二维数组

我正在使用C#中的色带制作Excel,但我就是无法让它工作

  private string[,] GetSpreadsheetData () 
  {
        try
        {
            Excel.Application exApp =
            Globals.TSExcelAddIn.Application as Excel.Application;
            Excel.Worksheet ExWorksheet = exApp.ActiveSheet as Excel.Worksheet;
            Excel.Range xlRange = ExWorksheet.get_Range("A1","F188000");

            object[,] values = (object[,])xlRange.Value2;
            string[,] tsReqs = new string[xlRange.Rows.Count, 7];
            char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

            for (int i = 0; i < tsReqs.GetLength(0); i++)
            {
                for (int z = 0; z < tsReqs.GetLength(1); z++)
                {
                    if(values[i+1,z+1] != null)
                        tsReqs[i, z] = values[i + 1, z + 1].ToString();
                }
            }
            return tsReqs;
        }

        catch
        {
            MessageBox.Show
                ("Excel has encountered an error. \nSaving work and exitting");
            return null;
        }
    }
从A1一直读到F188000单元格,我只希望它一直读到一行完全没有数据

   -        Caught: "Index was outside the bounds of the array." (System.IndexOutOfRangeException)  Exception Message = "Index was outside the bounds of the array.", Exception Type = "System.IndexOutOfRangeException"    
试试这个

    private static void printExcelValues(Worksheet xSheet)
    {
        Range xRng =xSheet.Cells.SpecialCells(
            XlCellType.xlCellTypeConstants);
        var arr = new string[xRng.Rows.Count,xRng.Columns.Count];
        foreach (Range item in xRng)
        {
            arr[item.Row-1,item.Column-1]=item.Value.ToString();
        }
    }
您可以使用|指定更多单元格类型,如XlCellType.xlcelltypeformals或任何其他您想要的类型。

试试这个

    private static void printExcelValues(Worksheet xSheet)
    {
        Range xRng =xSheet.Cells.SpecialCells(
            XlCellType.xlCellTypeConstants);
        var arr = new string[xRng.Rows.Count,xRng.Columns.Count];
        foreach (Range item in xRng)
        {
            arr[item.Row-1,item.Column-1]=item.Value.ToString();
        }
    }

您可以使用|指定更多单元格类型,如XlCellType.xlcelltypeformals或任何其他您想要的类型。

您的数组大小不同。您的值来自6列的
A1:F188000
,但您在7列的
tsReqs
中循环。看起来您试图解释
值将是基于1的数组这一事实,但没有正确解释这一事实

tsReqs
的声明更改为:

string[,] tsReqs = new string[xlRange.Rows.Count, 6];

你应该没事的

您的阵列大小不同。您的值来自6列的
A1:F188000
,但您在7列的
tsReqs
中循环。看起来您试图解释
值将是基于1的数组这一事实,但没有正确解释这一事实

tsReqs
的声明更改为:

string[,] tsReqs = new string[xlRange.Rows.Count, 6];

你应该没事的

> p>可以考虑使用<代码> ExcWorks.UsedRange < /C> >而不是<代码> ExExcWork.GETyLead(“A1”、“F188000”)< /C> > /P> 编辑:另外,我认为如果使用范围的.Text字段,值会自动转换为字符串,因此无需在此处使用.Value2

Excel.Range rng = ExWorksheet.UsedRange;
int rowCount = rng.Rows.Count;
int colCount = rng.Columns.Count;

string[,] tsReqs = new string[rowCount, colCount];

for (int i = 1; i <= rowCount; i++)
{
    for (int j = 1; j <= colCount; j++)
    {
        string str = rng.Cells[i, j].Text;
        tsReqs[i - 1, j - 1] = str;
    }
}
Excel.Range rng=ExWorksheet.UsedRange;
int rowCount=rng.Rows.Count;
int colCount=rng.Columns.Count;
string[,]tsReqs=新字符串[rowCount,colCount];

对于(int i=1;i),您可以考虑使用<代码> ExcExabl。UsedRange < /C> >而不是<代码> ExExcWork.GETyLead(“A1”、“F188000”)< /C> > /P> 编辑:另外,我认为如果使用范围的.Text字段,值会自动转换为字符串,因此无需在此处使用.Value2

Excel.Range rng = ExWorksheet.UsedRange;
int rowCount = rng.Rows.Count;
int colCount = rng.Columns.Count;

string[,] tsReqs = new string[rowCount, colCount];

for (int i = 1; i <= rowCount; i++)
{
    for (int j = 1; j <= colCount; j++)
    {
        string str = rng.Cells[i, j].Text;
        tsReqs[i - 1, j - 1] = str;
    }
}
Excel.Range rng=ExWorksheet.UsedRange;
int rowCount=rng.Rows.Count;
int colCount=rng.Columns.Count;
string[,]tsReqs=新字符串[rowCount,colCount];

对于(int i=1;i我必须做一些非常类似的事情。读取excel文件需要一段时间…我采取了不同的方法,但我立即完成了工作

首先,我给每一列指定了自己的数组。我将电子表格中的每一列保存为CSV(逗号分隔)文件。使用记事本打开该文件后,我能够将用逗号分隔的942个值复制到数组的初始化中

int[] Column1 = {300, 305, 310, ..., 5000};
                 [0]  [1]  [2]  ...  [941]
现在…如果你对每一列都这样做,那么位置将类似于“电子表格”中每一列的“行”

这种奇怪的方法非常适合我,因为我需要将用户输入的大小与电子表格中“宽度”列中的值进行比较,以获得有关电子表格中每个大小的信息

注意:如果您的单元格包含字符串,而不是像我这样的整数,则可以使用枚举方法:

enum column1 { thing_1, thing_2, ..., thing_n,}
                 [0]      [1]           [n]  
如果您想看一下,下面是我的代码: (这不是将电子表格转换为某些数组的代码——这只是几行代码,取决于列的数量——这是我编写的整个查找方法)

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
名称空间PalisadeWorld
{   
//结构将每个匹配面板大小的所有位置存储在数组“标识”中
结构ID
{
公共身份;
公共ID(int[]宽度,int行)
{   
//电子表格中的第1列
int[]所有宽度={300305310315320325330,…,5000};
int i,j;
int[]id=新的int[行];
对于(i=0;i

继续浏览我的电子表格的每一列


真的希望这能帮助到别人。干杯

我也做过类似的事情。阅读excel文件需要一段时间……我采取了不同的方法,但我很快就完成了工作

首先,我给每一列指定了自己的数组。我将电子表格中的每一列保存为CSV(逗号分隔)文件