【发布时间】:2020-04-09 23:06:38
【问题描述】:
我知道我的问题可能看起来很常见。这个论坛本身就有很多知识共享。但我无法为我的特定需求找到解决方案。
就我而言,我有一个 excel 工作簿(2016 版),其中包含 10 张工作表,每张 1500 行。每张纸中的列可能从 15 到 20 不等。我想从所有工作表中读取所有数据并验证它们的数据类型并将其插入到 sql server 数据库表中。
但我尝试使用 2 张,每张 100 行。
Excel.Worksheet ofWs;
Excel.Range range;
ofWs = (Excel.Worksheet)ofShe.get_Item("Sales");
range = ofWs.UsedRange;
for (int i = 2; i <= range.Rows.Count; i++)
{
string var1 = "";
double var2 = 0;
//validation for column1
if ((ofWs.Cells[i, 1] as Excel.Range).Value2 != null)
{
if ((ofWs.Cells[i, 1] as Excel.Range).Value2.GetType().ToString() == "System.String")
var1 = (string)(ofWs.Cells[i, 1] as Excel.Range).Value2;
else
{
sale_comm_column += "COLUMN A, ";
sale_errFlag = false;
}
}
else
{
sale_comm_column += "COLUMN A, ";
sale_errFlag = false;
}
//validation for column2
if ((ofWs.Cells[i, 2] as Excel.Range).Value2 != null)
{
if ((ofWs.Cells[i, 2] as Excel.Range).Value2.GetType().ToString() == "System.Double")
var2 = (double)(ofWs.Cells[i, 2] as Excel.Range).Value2;
else
{
sale_comm_column += "COLUMN B, ";
sale_errFlag = false;
}
}
else
{
sale_comm_column += "COLUMN B, ";
sale_errFlag = false;
}
}
这个 for 循环将遍历所有行,我正在验证“if”语句中的每一列。在这里,我只展示了第一张纸的 2 列的验证部分。对于 100 行本身来说,它花费了太多时间。但是,如果我删除所有这些“如果”,则需要更少的时间。如果我想在实际要求 10 张每张 1500 行的情况下尝试此操作,最好的方法是什么??
【问题讨论】:
-
文件格式是什么:.xls 还是 .xlsx?后者可以在没有 (t)rusty Office COM 互操作的情况下进行处理,这要好得多。
-
尝试不使用 Value2。 Value2 是文本比较,应该使用 string.Empty
-
@Christopher,版本是 .xlsx(Excel 2016)..
-
@jdweng,你的意思是,只要有 Value2 就用 Value 替换它???我无法得到“应该使用 string.Empty”
-
@jdweng,我尝试将 Value2 替换为 Value。读取和验证 100 行和 22 列的每个单元格也需要花费太多时间。
标签: c# excel excel-interop