在C#中使用Excel将单元格值传输到二维字符串数组
我需要有人创建一个方法,将得到我的excel电子表格中的所有单元格值到一个二维数组 我正在使用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;
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(逗号分隔)文件