如果列名称是空字符串,我必须将excel数据放入DataTable example copied from this.中,当数据进入DataTable时,空名称会转换为动态名称,如F1,F3,F22。如果列名有一个有效值,这是可以的,但是当我尝试获取列名为空的列名时,动态F22名称正在获取。F22在excel表格中不存在,我必须通知用户他有无效的空列名称。
因此,问题是如何判断列名是否是由OLEDB动态设置的?
DataColumnCollection excelDataColumns;
....
for (int i = 3; i < excelDataColumns.Count; i++) {
var columnName = excelDataColumns[i].ColumnName;
// Check if column name is blank
if (IsExcelDefaultColumnName(excelDataColumns[i], i))
{
invalidEntries.Add("Blank column name");
}
else
{
var result = IsValidData(GetFullData(columnName));
if (!result.Item1 && !columnName.Any(char.IsDigit))
{
invalidEntries.Add(columnName);
}
}
}发布于 2019-09-27 22:39:45
我想我理解这个问题,因为您需要读取数据库模式来判断列名是否在表中?(正确吗?)
如果您可以通过连接字符串访问SQL Server数据库,我有一个工具可以读取数据库架构。
这是我的开源项目DataTier.Net https://github.com/DataJuggler/DataTier.Net (end plug)中的一个示例
这使用Nuget包: DataJuggler.Net
// read database schema
database = sqlConnector.LoadDatabaseSchema(database);数据库有一个tables集合,每个表都有一个Fields集合。
SQL Database Connector类执行LoadDatabaseSchema:
Nuget包代码在这里:https://github.com/DataJuggler/DataJuggler.Net
或点网核心版本:https://github.com/DataJuggler/DataJuggler.Net.Core
上面的Nuget包还用于DB Compare,用于比较两个SQL Server数据库的数据库架构,并报告任何差异:
https://github.com/DataJuggler/DBCompare
希望没有人会认为这是垃圾邮件,因为我确实免费提供了所有内容,我只是试图回答“如何读取数据库架构”的问题,以便在这种情况下,他可以确定列名是否是真正的列名。我想我对这个问题的理解是正确的,如果没有解释清楚你需要什么,请更好地解释。
发布于 2019-09-27 23:13:47
如果您能够使用Excel.Application互操作,那么选择并选中第一行将显示列是否缺少名称,例如:
public void CheckExcelColumnName(string sourceFile)
{
if (!System.IO.File.Exists(sourceFile))
{
throw new System.ArgumentException("source file is missing");
}
try
{
Type excelType = Type.GetTypeFromProgID("Excel.Application");
dynamic excel = Activator.CreateInstance(excelType);
if (excel == null)
{
throw new System.Exception("Excel is missing");
}
excel.Workbooks.Open(sourceFile);
try
{
dynamic workbook = excel.Workbooks[1];
dynamic worksheets = workbook.Sheets;
dynamic worksheet = worksheets[1];
dynamic cells = worksheet.Cells;
int xlCellTypeLastCell = 11;
dynamic lastfilledcell = cells.SpecialCells(xlCellTypeLastCell, Type.Missing);
int lastcolumn = lastfilledcell.Column;
dynamic range = worksheet.Range("A1", "A1");//
var v = range.EntireRow.Value;
for(int c=1;c<= lastcolumn;c++)
{
if ( v[1,c]==null)
{
Console.WriteLine("excel sheet is missing column name for column #" + c);
break;
}
}
workbook.Close();
lastfilledcell = null;
cells = null;
range = null;
worksheet = null;
worksheets = null;
workbook = null;
}
catch {; }
excel.Quit();
//try { System.Runtime.InteropServices.Marshal.ReleaseComObject(excel); } catch {; }
try { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(excel); } catch {; }
excel = null;
}
catch(Exception ex)
{
}
}发布于 2019-09-28 01:30:24
尝试使用EPPLUS,您可以很容易地使用Epplus解决您的问题。
https://stackoverflow.com/questions/58136446
复制相似问题