A B C D E
产品代号 11111 产品组 XXXX
产品名称 XXXXX
(空行)
编号
序号 物料编号 老编号 名称 图号 ....... (二行, 有合并单无格)
1-001 001 1 XXXX XXX XXXX
1-002 002 2 XXXX XXX XXX
.....
请问这样的 Excel 文档怎么 将其导入数据库的 两张有主从关系的表中
分别: 产品表, 产品物料表
给出思路也行!
先谢谢各位大侠了!
25 个解决方案
#1
没做过,提一下操作思路吧
使用Ole连接对象(就像Acces那样)可以直接吧Excel当主数据库来读的,每个Sheet的名字都相当于表名
你获取到连接以后放在两个DataTable里面。由于DataSet容纳多个DataTable的时候可以连关系,所以应该就可以将主从表绑定在一起了(不过应该需要数据绝对干净啊,如果有脏数据,情况恐怕不乐观)
之后就可以把DataSet搞到数据库去了。
另外还有一个思路,可行性不知道如何。使用SQL的DTS包,如果做好了包可以发布成脚本用来操作。没写过,试试看吧!
使用Ole连接对象(就像Acces那样)可以直接吧Excel当主数据库来读的,每个Sheet的名字都相当于表名
你获取到连接以后放在两个DataTable里面。由于DataSet容纳多个DataTable的时候可以连关系,所以应该就可以将主从表绑定在一起了(不过应该需要数据绝对干净啊,如果有脏数据,情况恐怕不乐观)
之后就可以把DataSet搞到数据库去了。
另外还有一个思路,可行性不知道如何。使用SQL的DTS包,如果做好了包可以发布成脚本用来操作。没写过,试试看吧!
#2
先将
产品物料表 cut下来放到另一张sheet中.
用dts导到sql server的两张表中,然后在这两张表中进行相应的处理
------说错了莫怪。
产品物料表 cut下来放到另一张sheet中.
用dts导到sql server的两张表中,然后在这两张表中进行相应的处理
------说错了莫怪。
#3
连接没问题,
现在是第一个表怎么取数据与数据库表字段对应问题, 是否一个一个定位?
第二张表 要对应 Excel 表中
编号
序号 物料编号 老编号 名称 图号 ....... (二行, 有合并单无格)
1-001 001 1 XXXX XXX XXXX
1-002 002 2 XXXX XXX XXX
.....
这些行,
Cut 有什么好方法,
因为文件多, 不可能每张表手工操作的.
现在是第一个表怎么取数据与数据库表字段对应问题, 是否一个一个定位?
第二张表 要对应 Excel 表中
编号
序号 物料编号 老编号 名称 图号 ....... (二行, 有合并单无格)
1-001 001 1 XXXX XXX XXXX
1-002 002 2 XXXX XXX XXX
.....
这些行,
Cut 有什么好方法,
因为文件多, 不可能每张表手工操作的.
#4
导到数据库是用一个新表,他会自己建个新表,不要有现有的。
这个新表只是个临时表,用完后删除的。
合并单格的,先全部取消合并,保证列在第一行就可。
------说错了莫怪。
这个新表只是个临时表,用完后删除的。
合并单格的,先全部取消合并,保证列在第一行就可。
------说错了莫怪。
#5
还有个问题:
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
谢了!
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
谢了!
#6
前段时间也碰到类似的.
这个只能先用OleDB读取Excel中的内容,再进行筛选.
Excel数据大致分为几块,建议通过配置确定每块的位置,方便读取.
","问题可替换掉.
这个只能先用OleDB读取Excel中的内容,再进行筛选.
Excel数据大致分为几块,建议通过配置确定每块的位置,方便读取.
","问题可替换掉.
#7
/// <summary>
/// 获取指定块(区域)的数据.
/// </summary>
/// <param name="dsSource">来自Excel中的记录信息.</param>
/// <param name="markSign">区域块左上角第一单元格内容.</param>
/// <param name="rowsCount">区域块的行数(未知则传0).</param>
/// <param name="columnsCount">区域块的列数.</param>
/// <param name="msg">返回错误消息(如果存在).</param>
/// <returns>DataSet:改数据块的所包含的数据内容.</returns>
protected DataSet GetSpecifyData(DataSet dsSource, string markSign, int rowsCount, int columnsCount)
{
DataSet dsN = new DataSet();
DataTable dtN;
if (dsSource != null && dsSource.Tables.Count > 0)
{
//遍历Excel中所有的表
foreach (DataTable dt in dsSource.Tables)
{
dtN = new DataTable(dt.TableName);
DataRow row = null;
bool bl = false;
bool IsErow = true;
for (int j = 0; j < dt.Rows.Count; j++)
{
if (rowsCount == 0)
{
IsErow = false;
}
if (dtN.Rows.Count < rowsCount || IsErow == false)
{
row = dtN.NewRow();
for (int k = 0; k < dt.Columns.Count; k++)
{
//找到区域块左上角标识.
if (dt.Rows[j][k].ToString().Trim().Equals(markSign) || bl)
{
bl = true;
//填充列.
if (!dtN.Columns.Contains(k.ToString()) && dtN.Columns.Count < columnsCount)
{
dtN.Columns.Add(new DataColumn(k.ToString(), typeof(string)));
}
//填充行
if (dtN.Columns.Contains(k.ToString()))
{
row[k.ToString()] = dt.Rows[j][k].ToString();
}
}
}
if (bl)
{
dtN.Rows.Add(row);
}
}
else
{
break;
}
}
if (dtN.Rows.Count == 0)
{
ErMessage = string.Format(ImportConst.ErrorMessage_NoFound_Column, dt.TableName, markSign);
}
else
{
dsN.Tables.Add(dtN);
}
}
}
return dsN;
}
#endregion
/// 获取指定块(区域)的数据.
/// </summary>
/// <param name="dsSource">来自Excel中的记录信息.</param>
/// <param name="markSign">区域块左上角第一单元格内容.</param>
/// <param name="rowsCount">区域块的行数(未知则传0).</param>
/// <param name="columnsCount">区域块的列数.</param>
/// <param name="msg">返回错误消息(如果存在).</param>
/// <returns>DataSet:改数据块的所包含的数据内容.</returns>
protected DataSet GetSpecifyData(DataSet dsSource, string markSign, int rowsCount, int columnsCount)
{
DataSet dsN = new DataSet();
DataTable dtN;
if (dsSource != null && dsSource.Tables.Count > 0)
{
//遍历Excel中所有的表
foreach (DataTable dt in dsSource.Tables)
{
dtN = new DataTable(dt.TableName);
DataRow row = null;
bool bl = false;
bool IsErow = true;
for (int j = 0; j < dt.Rows.Count; j++)
{
if (rowsCount == 0)
{
IsErow = false;
}
if (dtN.Rows.Count < rowsCount || IsErow == false)
{
row = dtN.NewRow();
for (int k = 0; k < dt.Columns.Count; k++)
{
//找到区域块左上角标识.
if (dt.Rows[j][k].ToString().Trim().Equals(markSign) || bl)
{
bl = true;
//填充列.
if (!dtN.Columns.Contains(k.ToString()) && dtN.Columns.Count < columnsCount)
{
dtN.Columns.Add(new DataColumn(k.ToString(), typeof(string)));
}
//填充行
if (dtN.Columns.Contains(k.ToString()))
{
row[k.ToString()] = dt.Rows[j][k].ToString();
}
}
}
if (bl)
{
dtN.Rows.Add(row);
}
}
else
{
break;
}
}
if (dtN.Rows.Count == 0)
{
ErMessage = string.Format(ImportConst.ErrorMessage_NoFound_Column, dt.TableName, markSign);
}
else
{
dsN.Tables.Add(dtN);
}
}
}
return dsN;
}
#endregion
#8
分块读取指定的单元格已完成了,
下面这个问题有没有好的解决方法? 再问:
==============================================
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
下面这个问题有没有好的解决方法? 再问:
==============================================
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
#9
请问 Zine_Alone(老鼠都给猫当伴娘了.哎.)
怎么筛选?
我是通过 Select 语句直接导到 DataTable 中的,
没有做遍历的.
怎么筛选?
我是通过 Select 语句直接导到 DataTable 中的,
没有做遍历的.
#10
Excel--OledDB--DataSet---遍历(每块的行数,列数)---期望的DataSet.
另外还有一种办法,但是也需要知道Excel中你要读取的这些数据块的位置(列,行).用Excel.dll去读取,但是那种效率很低下.
另外还有一种办法,但是也需要知道Excel中你要读取的这些数据块的位置(列,行).用Excel.dll去读取,但是那种效率很低下.
#11
to
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
在遍历(每块的行数,列数)---期望的DataSet 中 Replace掉,我也没找到什么好办法
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
在遍历(每块的行数,列数)---期望的DataSet 中 Replace掉,我也没找到什么好办法
#12
to: Zine_Alone(老鼠都给猫当伴娘了.哎.)
1. 实际在我的 Excel 文档上 有小三角符号 的单元格并没有看见前面的 "'", 但有 小三角符号, Office 2003 也提示 可能是 文字格式的数字.
2. 这样的单元格导出时 有些为空, 有些又是OK的
#13
mark
#14
帮你顶~
#15
再请问:
我使用 Oledb 读 Excel 表到 DataTable时,总是把 文字当作数字,
如: 123253, 得出 123253.0 什么的,
请问:
怎么设置在使用 OleDb读 Excel 表到 DataTable 时让所有列格式都是 字符串 类型.
急!
先谢过!
我使用 Oledb 读 Excel 表到 DataTable时,总是把 文字当作数字,
如: 123253, 得出 123253.0 什么的,
请问:
怎么设置在使用 OleDb读 Excel 表到 DataTable 时让所有列格式都是 字符串 类型.
急!
先谢过!
#16
帮你顶~
#17
还没结果, 那位大哥帮助!!
#18
1.Excel中的格式该成文本
2.将这一列的内容前再excel里加' 或者Oledb的方法
Standard:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
"HDR=Yes;" indicates that the first row contains columnnames, not data
"IMEX=1;" tells the driver to always read "intermixed" data columns as text
TIP! SQL syntax: "SELECT * FROM [sheet1$]" - i.e. worksheet name followed by a "$" and wrapped in "[" "]" brackets.
2.将这一列的内容前再excel里加' 或者Oledb的方法
Standard:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
"HDR=Yes;" indicates that the first row contains columnnames, not data
"IMEX=1;" tells the driver to always read "intermixed" data columns as text
TIP! SQL syntax: "SELECT * FROM [sheet1$]" - i.e. worksheet name followed by a "$" and wrapped in "[" "]" brackets.
#19
ooo
#20
倒数据是最烦的事情了,我以前用的是VBA处理,效率不能说是高,但是还是很方便的。
帮顶
帮顶
#21
2.0新增一个类SqlBulkCopy。
SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
具体操作,请查msdn
SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
具体操作,请查msdn
#22
另:有关'号的问题,你可以在使用sql语句生成dataset的时候,直接用sql语句将其替换掉
#23
试用使用XML
另存为XML,然后打开看看里面的XML格式,或许对你你帮助
:)我经常就是这么解决问题的,这样做经常很快就有思路了
另存为XML,然后打开看看里面的XML格式,或许对你你帮助
:)我经常就是这么解决问题的,这样做经常很快就有思路了
#24
谢谢各位的解答!
我的情况是:
原来的一些老的 BOM 报表,
现在要用公司上BOM系统, 将原来的这些BOM数据导入到 数据库中,
BOM报表的格式通常是:
BOM名称 XXX BOM编号 XXXX
BOM日期 XXXX 版本号 XXXX ....
//下面是物料的列表
A物料 (编号)09929838282 50 个 ...
...
我的处理是: 将一张 BOM 报表导入到 两个主从关系的数据表中(BOM表, BOMDetail表).
有两个问题:
1). BOM表中的数据需要从Excel报表的不同段中提取,
BOM名称数据 可能位于 第2列3行, BOM编号 可能位于 第3列4行,
...
2). 物料的列表导入到 BOMDetail表
我使用 OleDb 导取这一部分的数据时, 碰到有些数据为空, 但 Excel 上明明有数据,
该单元格上有"小三角符号", 但并没有看见前面的 "'", Office 2003 也提示 可能是 文字格式的数字.
第一个问题我使用 定位查找 已解决.
但第二个问题还没有答案.
也请教各位.
我的情况是:
原来的一些老的 BOM 报表,
现在要用公司上BOM系统, 将原来的这些BOM数据导入到 数据库中,
BOM报表的格式通常是:
BOM名称 XXX BOM编号 XXXX
BOM日期 XXXX 版本号 XXXX ....
//下面是物料的列表
A物料 (编号)09929838282 50 个 ...
...
我的处理是: 将一张 BOM 报表导入到 两个主从关系的数据表中(BOM表, BOMDetail表).
有两个问题:
1). BOM表中的数据需要从Excel报表的不同段中提取,
BOM名称数据 可能位于 第2列3行, BOM编号 可能位于 第3列4行,
...
2). 物料的列表导入到 BOMDetail表
我使用 OleDb 导取这一部分的数据时, 碰到有些数据为空, 但 Excel 上明明有数据,
该单元格上有"小三角符号", 但并没有看见前面的 "'", Office 2003 也提示 可能是 文字格式的数字.
第一个问题我使用 定位查找 已解决.
但第二个问题还没有答案.
也请教各位.
#25
看来只好结贴了!
#1
没做过,提一下操作思路吧
使用Ole连接对象(就像Acces那样)可以直接吧Excel当主数据库来读的,每个Sheet的名字都相当于表名
你获取到连接以后放在两个DataTable里面。由于DataSet容纳多个DataTable的时候可以连关系,所以应该就可以将主从表绑定在一起了(不过应该需要数据绝对干净啊,如果有脏数据,情况恐怕不乐观)
之后就可以把DataSet搞到数据库去了。
另外还有一个思路,可行性不知道如何。使用SQL的DTS包,如果做好了包可以发布成脚本用来操作。没写过,试试看吧!
使用Ole连接对象(就像Acces那样)可以直接吧Excel当主数据库来读的,每个Sheet的名字都相当于表名
你获取到连接以后放在两个DataTable里面。由于DataSet容纳多个DataTable的时候可以连关系,所以应该就可以将主从表绑定在一起了(不过应该需要数据绝对干净啊,如果有脏数据,情况恐怕不乐观)
之后就可以把DataSet搞到数据库去了。
另外还有一个思路,可行性不知道如何。使用SQL的DTS包,如果做好了包可以发布成脚本用来操作。没写过,试试看吧!
#2
先将
产品物料表 cut下来放到另一张sheet中.
用dts导到sql server的两张表中,然后在这两张表中进行相应的处理
------说错了莫怪。
产品物料表 cut下来放到另一张sheet中.
用dts导到sql server的两张表中,然后在这两张表中进行相应的处理
------说错了莫怪。
#3
连接没问题,
现在是第一个表怎么取数据与数据库表字段对应问题, 是否一个一个定位?
第二张表 要对应 Excel 表中
编号
序号 物料编号 老编号 名称 图号 ....... (二行, 有合并单无格)
1-001 001 1 XXXX XXX XXXX
1-002 002 2 XXXX XXX XXX
.....
这些行,
Cut 有什么好方法,
因为文件多, 不可能每张表手工操作的.
现在是第一个表怎么取数据与数据库表字段对应问题, 是否一个一个定位?
第二张表 要对应 Excel 表中
编号
序号 物料编号 老编号 名称 图号 ....... (二行, 有合并单无格)
1-001 001 1 XXXX XXX XXXX
1-002 002 2 XXXX XXX XXX
.....
这些行,
Cut 有什么好方法,
因为文件多, 不可能每张表手工操作的.
#4
导到数据库是用一个新表,他会自己建个新表,不要有现有的。
这个新表只是个临时表,用完后删除的。
合并单格的,先全部取消合并,保证列在第一行就可。
------说错了莫怪。
这个新表只是个临时表,用完后删除的。
合并单格的,先全部取消合并,保证列在第一行就可。
------说错了莫怪。
#5
还有个问题:
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
谢了!
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
谢了!
#6
前段时间也碰到类似的.
这个只能先用OleDB读取Excel中的内容,再进行筛选.
Excel数据大致分为几块,建议通过配置确定每块的位置,方便读取.
","问题可替换掉.
这个只能先用OleDB读取Excel中的内容,再进行筛选.
Excel数据大致分为几块,建议通过配置确定每块的位置,方便读取.
","问题可替换掉.
#7
/// <summary>
/// 获取指定块(区域)的数据.
/// </summary>
/// <param name="dsSource">来自Excel中的记录信息.</param>
/// <param name="markSign">区域块左上角第一单元格内容.</param>
/// <param name="rowsCount">区域块的行数(未知则传0).</param>
/// <param name="columnsCount">区域块的列数.</param>
/// <param name="msg">返回错误消息(如果存在).</param>
/// <returns>DataSet:改数据块的所包含的数据内容.</returns>
protected DataSet GetSpecifyData(DataSet dsSource, string markSign, int rowsCount, int columnsCount)
{
DataSet dsN = new DataSet();
DataTable dtN;
if (dsSource != null && dsSource.Tables.Count > 0)
{
//遍历Excel中所有的表
foreach (DataTable dt in dsSource.Tables)
{
dtN = new DataTable(dt.TableName);
DataRow row = null;
bool bl = false;
bool IsErow = true;
for (int j = 0; j < dt.Rows.Count; j++)
{
if (rowsCount == 0)
{
IsErow = false;
}
if (dtN.Rows.Count < rowsCount || IsErow == false)
{
row = dtN.NewRow();
for (int k = 0; k < dt.Columns.Count; k++)
{
//找到区域块左上角标识.
if (dt.Rows[j][k].ToString().Trim().Equals(markSign) || bl)
{
bl = true;
//填充列.
if (!dtN.Columns.Contains(k.ToString()) && dtN.Columns.Count < columnsCount)
{
dtN.Columns.Add(new DataColumn(k.ToString(), typeof(string)));
}
//填充行
if (dtN.Columns.Contains(k.ToString()))
{
row[k.ToString()] = dt.Rows[j][k].ToString();
}
}
}
if (bl)
{
dtN.Rows.Add(row);
}
}
else
{
break;
}
}
if (dtN.Rows.Count == 0)
{
ErMessage = string.Format(ImportConst.ErrorMessage_NoFound_Column, dt.TableName, markSign);
}
else
{
dsN.Tables.Add(dtN);
}
}
}
return dsN;
}
#endregion
/// 获取指定块(区域)的数据.
/// </summary>
/// <param name="dsSource">来自Excel中的记录信息.</param>
/// <param name="markSign">区域块左上角第一单元格内容.</param>
/// <param name="rowsCount">区域块的行数(未知则传0).</param>
/// <param name="columnsCount">区域块的列数.</param>
/// <param name="msg">返回错误消息(如果存在).</param>
/// <returns>DataSet:改数据块的所包含的数据内容.</returns>
protected DataSet GetSpecifyData(DataSet dsSource, string markSign, int rowsCount, int columnsCount)
{
DataSet dsN = new DataSet();
DataTable dtN;
if (dsSource != null && dsSource.Tables.Count > 0)
{
//遍历Excel中所有的表
foreach (DataTable dt in dsSource.Tables)
{
dtN = new DataTable(dt.TableName);
DataRow row = null;
bool bl = false;
bool IsErow = true;
for (int j = 0; j < dt.Rows.Count; j++)
{
if (rowsCount == 0)
{
IsErow = false;
}
if (dtN.Rows.Count < rowsCount || IsErow == false)
{
row = dtN.NewRow();
for (int k = 0; k < dt.Columns.Count; k++)
{
//找到区域块左上角标识.
if (dt.Rows[j][k].ToString().Trim().Equals(markSign) || bl)
{
bl = true;
//填充列.
if (!dtN.Columns.Contains(k.ToString()) && dtN.Columns.Count < columnsCount)
{
dtN.Columns.Add(new DataColumn(k.ToString(), typeof(string)));
}
//填充行
if (dtN.Columns.Contains(k.ToString()))
{
row[k.ToString()] = dt.Rows[j][k].ToString();
}
}
}
if (bl)
{
dtN.Rows.Add(row);
}
}
else
{
break;
}
}
if (dtN.Rows.Count == 0)
{
ErMessage = string.Format(ImportConst.ErrorMessage_NoFound_Column, dt.TableName, markSign);
}
else
{
dsN.Tables.Add(dtN);
}
}
}
return dsN;
}
#endregion
#8
分块读取指定的单元格已完成了,
下面这个问题有没有好的解决方法? 再问:
==============================================
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
下面这个问题有没有好的解决方法? 再问:
==============================================
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
#9
请问 Zine_Alone(老鼠都给猫当伴娘了.哎.)
怎么筛选?
我是通过 Select 语句直接导到 DataTable 中的,
没有做遍历的.
怎么筛选?
我是通过 Select 语句直接导到 DataTable 中的,
没有做遍历的.
#10
Excel--OledDB--DataSet---遍历(每块的行数,列数)---期望的DataSet.
另外还有一种办法,但是也需要知道Excel中你要读取的这些数据块的位置(列,行).用Excel.dll去读取,但是那种效率很低下.
另外还有一种办法,但是也需要知道Excel中你要读取的这些数据块的位置(列,行).用Excel.dll去读取,但是那种效率很低下.
#11
to
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
在遍历(每块的行数,列数)---期望的DataSet 中 Replace掉,我也没找到什么好办法
我在使用 Oledb 将Excel 导入到DataTable 时,
数字是文字格式或前面有 "'" 号的单元不能导入.
即在 Excel 单元格的 左上角显示 小三角符号的
请问那位兄弟有解决方法?
在遍历(每块的行数,列数)---期望的DataSet 中 Replace掉,我也没找到什么好办法
#12
to: Zine_Alone(老鼠都给猫当伴娘了.哎.)
1. 实际在我的 Excel 文档上 有小三角符号 的单元格并没有看见前面的 "'", 但有 小三角符号, Office 2003 也提示 可能是 文字格式的数字.
2. 这样的单元格导出时 有些为空, 有些又是OK的
#13
mark
#14
帮你顶~
#15
再请问:
我使用 Oledb 读 Excel 表到 DataTable时,总是把 文字当作数字,
如: 123253, 得出 123253.0 什么的,
请问:
怎么设置在使用 OleDb读 Excel 表到 DataTable 时让所有列格式都是 字符串 类型.
急!
先谢过!
我使用 Oledb 读 Excel 表到 DataTable时,总是把 文字当作数字,
如: 123253, 得出 123253.0 什么的,
请问:
怎么设置在使用 OleDb读 Excel 表到 DataTable 时让所有列格式都是 字符串 类型.
急!
先谢过!
#16
帮你顶~
#17
还没结果, 那位大哥帮助!!
#18
1.Excel中的格式该成文本
2.将这一列的内容前再excel里加' 或者Oledb的方法
Standard:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
"HDR=Yes;" indicates that the first row contains columnnames, not data
"IMEX=1;" tells the driver to always read "intermixed" data columns as text
TIP! SQL syntax: "SELECT * FROM [sheet1$]" - i.e. worksheet name followed by a "$" and wrapped in "[" "]" brackets.
2.将这一列的内容前再excel里加' 或者Oledb的方法
Standard:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"""
"HDR=Yes;" indicates that the first row contains columnnames, not data
"IMEX=1;" tells the driver to always read "intermixed" data columns as text
TIP! SQL syntax: "SELECT * FROM [sheet1$]" - i.e. worksheet name followed by a "$" and wrapped in "[" "]" brackets.
#19
ooo
#20
倒数据是最烦的事情了,我以前用的是VBA处理,效率不能说是高,但是还是很方便的。
帮顶
帮顶
#21
2.0新增一个类SqlBulkCopy。
SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
具体操作,请查msdn
SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下 SqlBulkCopy 提供明显的性能优势。
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
具体操作,请查msdn
#22
另:有关'号的问题,你可以在使用sql语句生成dataset的时候,直接用sql语句将其替换掉
#23
试用使用XML
另存为XML,然后打开看看里面的XML格式,或许对你你帮助
:)我经常就是这么解决问题的,这样做经常很快就有思路了
另存为XML,然后打开看看里面的XML格式,或许对你你帮助
:)我经常就是这么解决问题的,这样做经常很快就有思路了
#24
谢谢各位的解答!
我的情况是:
原来的一些老的 BOM 报表,
现在要用公司上BOM系统, 将原来的这些BOM数据导入到 数据库中,
BOM报表的格式通常是:
BOM名称 XXX BOM编号 XXXX
BOM日期 XXXX 版本号 XXXX ....
//下面是物料的列表
A物料 (编号)09929838282 50 个 ...
...
我的处理是: 将一张 BOM 报表导入到 两个主从关系的数据表中(BOM表, BOMDetail表).
有两个问题:
1). BOM表中的数据需要从Excel报表的不同段中提取,
BOM名称数据 可能位于 第2列3行, BOM编号 可能位于 第3列4行,
...
2). 物料的列表导入到 BOMDetail表
我使用 OleDb 导取这一部分的数据时, 碰到有些数据为空, 但 Excel 上明明有数据,
该单元格上有"小三角符号", 但并没有看见前面的 "'", Office 2003 也提示 可能是 文字格式的数字.
第一个问题我使用 定位查找 已解决.
但第二个问题还没有答案.
也请教各位.
我的情况是:
原来的一些老的 BOM 报表,
现在要用公司上BOM系统, 将原来的这些BOM数据导入到 数据库中,
BOM报表的格式通常是:
BOM名称 XXX BOM编号 XXXX
BOM日期 XXXX 版本号 XXXX ....
//下面是物料的列表
A物料 (编号)09929838282 50 个 ...
...
我的处理是: 将一张 BOM 报表导入到 两个主从关系的数据表中(BOM表, BOMDetail表).
有两个问题:
1). BOM表中的数据需要从Excel报表的不同段中提取,
BOM名称数据 可能位于 第2列3行, BOM编号 可能位于 第3列4行,
...
2). 物料的列表导入到 BOMDetail表
我使用 OleDb 导取这一部分的数据时, 碰到有些数据为空, 但 Excel 上明明有数据,
该单元格上有"小三角符号", 但并没有看见前面的 "'", Office 2003 也提示 可能是 文字格式的数字.
第一个问题我使用 定位查找 已解决.
但第二个问题还没有答案.
也请教各位.
#25
看来只好结贴了!