在 Winforms 应用程序中使用 Excel Interop 缓慢写入 Excel 单元格
Slow writes to Excel cell using Excel Interop in Winforms application
我正在寻找有关将数据写入 Excel 作品sheet 的代码的帮助。
我目前正在一次将数据写入单个单元格,每个单元格大约需要三秒钟。可以想象,当你开始进入数百个单元格时,这个时间真的开始加起来了。
我知道有一种方法可以保存到一定范围的单元格,但不完全确定如何执行此操作。
我正在写的文档是一份问卷式的表格sheet,其中包含以下列:数字、问题、是、否、NA。
我遍历用户控件列表,其中包含用户从我的表单中选择的答案,然后将其写入单元格。
感谢任何帮助,谢谢。
if (QuestionList.Count > 0)
{
//loop round rows
for (int i = 0; i < QuestionList.Count; i++)
{
//check that index is not null
if (!String.IsNullOrEmpty(QuestionList[i].Index))
{
//if the char in index is a letter
if (Char.IsLetter(QuestionList[i].Index[0]))
{
worksheet2.Cells[i + 1, 4].Value2 = QuestionList[i].Yes;
worksheet2.Cells[i + 1, 5].Value2 = QuestionList[i].No;
worksheet2.Cells[i + 1, 6].Value2 = QuestionList[i].NA;
}
}
}
}
一次读取多个单元格值的简单方法是创建一个新的 Excel 范围,指定您要读取的单元格范围。
然后,您可以获取范围内的值并将它们放入多维对象数组中。
然后只需返回数组中的单元格位置即可获取值。
这将进行一次读取以获取多个单元格值,而不是对每个单元格进行一次读取。
string name;
string dob;
string address;
//excel range
Excel.Range range = (Excel.Range)xlWorksheet1.Range["A1", "I10"];
//range array
object[,] rangeValueArray = range.Value2;
//cell 1A
if (rangeValueArray[1,1] != null)
{
name = rangeValueArray[1, 1].ToString();
}
//cell 1B
if (rangeValueArray[1, 2] != null)
{
dob = rangeValueArray[1, 2].ToString();
}
//cell 1C
if (rangeValueArray[1, 3] != null)
{
address = rangeValueArray[1, 3].ToString();
}
我正在寻找有关将数据写入 Excel 作品sheet 的代码的帮助。 我目前正在一次将数据写入单个单元格,每个单元格大约需要三秒钟。可以想象,当你开始进入数百个单元格时,这个时间真的开始加起来了。
我知道有一种方法可以保存到一定范围的单元格,但不完全确定如何执行此操作。
我正在写的文档是一份问卷式的表格sheet,其中包含以下列:数字、问题、是、否、NA。 我遍历用户控件列表,其中包含用户从我的表单中选择的答案,然后将其写入单元格。
感谢任何帮助,谢谢。
if (QuestionList.Count > 0)
{
//loop round rows
for (int i = 0; i < QuestionList.Count; i++)
{
//check that index is not null
if (!String.IsNullOrEmpty(QuestionList[i].Index))
{
//if the char in index is a letter
if (Char.IsLetter(QuestionList[i].Index[0]))
{
worksheet2.Cells[i + 1, 4].Value2 = QuestionList[i].Yes;
worksheet2.Cells[i + 1, 5].Value2 = QuestionList[i].No;
worksheet2.Cells[i + 1, 6].Value2 = QuestionList[i].NA;
}
}
}
}
一次读取多个单元格值的简单方法是创建一个新的 Excel 范围,指定您要读取的单元格范围。 然后,您可以获取范围内的值并将它们放入多维对象数组中。 然后只需返回数组中的单元格位置即可获取值。
这将进行一次读取以获取多个单元格值,而不是对每个单元格进行一次读取。
string name;
string dob;
string address;
//excel range
Excel.Range range = (Excel.Range)xlWorksheet1.Range["A1", "I10"];
//range array
object[,] rangeValueArray = range.Value2;
//cell 1A
if (rangeValueArray[1,1] != null)
{
name = rangeValueArray[1, 1].ToString();
}
//cell 1B
if (rangeValueArray[1, 2] != null)
{
dob = rangeValueArray[1, 2].ToString();
}
//cell 1C
if (rangeValueArray[1, 3] != null)
{
address = rangeValueArray[1, 3].ToString();
}