我有一个从Excel导入的集合。我想有一栏告诉我记录号。这可能吗? A)我不想有一个外部柜台 B)我不想将Excel文件更新为具有行号列。
如果需要,我可以提供屏幕截图,但似乎还是找不到要添加的功能。
答案 0 :(得分:1)
好的,我提出的解决方案将在某些C#代码块中使用一些SQL。我的评论与我的区别在于,我认为我可以在SQL查询中使用MSSQL语法,但事实并非如此(例如ROW_NUMBER()
无效...),所以我不得不在我这边进行一些谷歌搜索和测试。但是,是的,它很有效,而且很费劲,您可以按照以下步骤操作:
创建一个新对象(建议名称为“ MS Excel-SQL”),然后在“初始化”页面中,将System.Data.OleDb
添加到“命名空间导入”并将语言设置为C#:
在相同的初始化阶段,将以下代码插入“全局代码”选项卡:
public DataTable GetDataFromExcel (string filename,string sql)
{
DataTable dt;
OleDbConnection MyConnection;
DataSet DtSet;
OleDbDataAdapter MyCommand;
MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+filename+" Properties=Excel 12.0;");
MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, MyConnection);
DtSet = new System.Data.DataSet();
MyCommand.Fill(DtSet);
dt = DtSet.Tables[0];
MyConnection.Close();
return dt;
}
单击确定,适当地重命名操作1,例如“带有行号的Excel查询”并插入一个新的代码阶段(建议也正确命名):
您至少需要文件的路径,工作表名称和输入查询,以及输出集合:
将变量放入“开始”和“结束”阶段,并在“代码”选项卡中,插入以下内容:
Results = GetDataFromExcel(@"" + File_Path + ";Extended", Query + " FROM [" + Worksheet_Name + "$]");
Results.Columns.Add("RowNumber", typeof(int));
int Row = 1;
foreach (DataRow ThisRow in Results.Rows)
{
ThisRow["RowNumber"] = Row;
Row++;
}
保存对象,您现在可以从Process View调用此操作。文件路径和工作表名称和结果应简单明了,对于查询,您可以使用SELECT *
之类的内容,也可以使用SELECT [Column 1], [Column 2]
之类的特定列(推荐)。您的结果集合将包含这些列,以及一个名为RowNumber
的附加列。您可以从该集合中生成标识符(添加列,然后循环以连接日期),或调整对象中的代码阶段以添加另一列,并用连接的行和日期填充(除非它作为对象的灵活性较差)之后)。
答案 1 :(得分:0)