最近做了个小的条码,涉及要将Excel中的数据读取出来并以条码的格式显示
实验目的:打印条码标签以供标识,扫描
实验点:1.Excel 的读取
2.条码图形绘制
3.打印
点一:Excel 导入:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 5.0;HDR=NO;IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [s$]", strConn);
DataSet ds = new DataSet();
oada.Fill(ds);
注意 strConn 后面Extended Properties='Excel 5.0;HDR=NO;IMEX=1'部分,首先,是用‘’引起来否则可能会出现异常:“找不到可安装的ISAM ”。
HDR=NO 代表不包含第一行数据,Yes 代表包含第一行数据《是NO 不是False 》
IMEX 的数值有:“0,1,2”三种,0 代表“当前模式为汇出模式”,这个模式开启的Excel 档案只能用来做“写入”用途;
1代表“当前的模式为汇入模式”,这个模式开启的Excel档案只能用来做“读取”用途;
2代表“连结模式”,这个模式开启的Excel档案可同时支援“读取”与 “写入”用途;
点二:条码显示
Code39模式,代码就不在此显示了
关键
public ImgDrawing()
{
m_Code39.Add("A", "1101010010110");
m_Code39.Add("B", "1011010010110");
m_Code39.Add("C", "1101101001010");
m_Code39.Add("D", "1010110010110");
m_Code39.Add("E", "1101011001010");
m_Code39.Add("F", "1011011001010");
m_Code39.Add("G", "1010100110110");
m_Code39.Add("H", "1101010011010");
m_Code39.Add("I", "1011010011010");
m_Code39.Add("J", "1010110011010");
m_Code39.Add("K", "1101010100110");
m_Code39.Add("L", "1011010100110");
m_Code39.Add("M", "1101101010010");
m_Code39.Add("N", "1010110100110");
m_Code39.Add("O", "1101011010010");
m_Code39.Add("P", "1011011010010");
m_Code39.Add("Q", "1010101100110");
m_Code39.Add("R", "1101010110010");
m_Code39.Add("S", "1011010110010");
m_Code39.Add("T", "1010110110010");
m_Code39.Add("U", "1100101010110");
m_Code39.Add("V", "1001101010110");
m_Code39.Add("W", "1100110101010");
m_Code39.Add("X", "1001011010110");
m_Code39.Add("Y", "1100101101010");
m_Code39.Add("Z", "1001101101010");
m_Code39.Add("0", "1010011011010");
m_Code39.Add("1", "1101001010110");
m_Code39.Add("2", "1011001010110");
m_Code39.Add("3", "1101100101010");
m_Code39.Add("4", "1010011010110");
m_Code39.Add("5", "1101001101010");
m_Code39.Add("6", "1011001101010");
m_Code39.Add("7", "1010010110110");
m_Code39.Add("8", "1101001011010");
m_Code39.Add("9", "1011001011010");
m_Code39.Add("+", "1001010010010");
m_Code39.Add("-", "1001010110110");
m_Code39.Add("*", "1001011011010");
m_Code39.Add("/", "1001001010010");
m_Code39.Add("%", "1010010010010");
m_Code39.Add("contentquot;","1001001001010");
m_Code39.Add(".", "1100101011010");
m_Code39.Add(" ", "1001101011010");
}
3. 打印:
设计方案有二,一个是动态添加图片控件,通过table来控制图片控件显示的位置,然后用微软自带的网页打印,这样方便一点;另一个是将图片以二进制格式存入数据库,然后通过水晶报表来绑定实现,这样可能涉及图片的存取以及读取相对稍微麻烦一点;
测试过程中遇到一个小问题,本来打算用水晶报表来实现,DataSet 都配置好了,后来嫌麻烦,就换方案了,然后DataSet 没有删除,结果在读取Excel 绑定的时候ds.table[0] 始终没有数据,后来试了一下ds.table[1] 这个时候有数据了,后来整理程式时候把DataSet 删除了,程序报错,又改回成ds.tables[0]才可以,可能默认填充不一样吧;
心得体会:凡事只有亲自做了之后才知道有很多细节要注意!!技术有待加强,革命尚未成功,同志依然需努力哇!!