C#窗体中嵌入excel的模板
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#窗体中嵌入excel的模板相关的知识,希望对你有一定的参考价值。
我用excel画好单据的模板然后在C#里面把数据写进去
我现在就想知道怎么把 excel的worksheet显示到c#窗体中去
不显示那些网格线之类的 因为是个单据样子 就跟打印预览那样
不显示网格不是主要问题 主要问题是怎么让worksheet在windows窗体中显示
不要显示excel表头啊 工具栏之类的 只显示数据
是winform窗体 不是asp.net网页
EXCEL中 工具 选项 在视图标签中 把网格线前的勾去掉就可以了。 参考技术B string strConn = "Data Source=.;Initial Catalog=SuieDB;Integrated Security=True";
protected void Page_Load(object sender, EventArgs e)
SqlConnection cn = new SqlConnection(strConn);
cn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select * from Softs", cn);
DataSet ds = new DataSet();
sda.Fill(ds, "Softs");
this.GridView1.DataSource = ds.Tables["Softs"]; this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
public DataSet ExecleDs(string filenameurl, string table)
string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataSet ds = new DataSet();;
OleDbDataAdapter odda = new OleDbDataAdapter("select * from [Sheet1$]", conn); //Excel表
odda.Fill(ds, table);
return ds;
protected void Button1_Click(object sender, EventArgs e)
if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
string IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xls")
Response.Write("<script>alert('只可以选择Excel文件')</script>");
return;//当选择的不是Excel文件时,返回
SqlConnection cn = new SqlConnection(strConn);
cn.Open();
string filename = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName; //获取Execle文件名 DateTime日期函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExecleDs(savePath, filename); //调用自定义方法
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示
else
for (int i = 0; i < dr.Length; i++)
string author_Code = dr[i]["软件号"].ToString();//软件号 excel列名【名称不能变,否则就会出错】
string serial_Code = dr[i]["授权码"].ToString();//授权码 列名 以下类似
string sqlcheck = "select count(*) from Softs where AuthorCode='" + author_Code + "'And SerialCode='" + serial_Code + "'"; //检查用户是否存在
SqlCommand sqlcmd = new SqlCommand(sqlcheck, cn);
int count = Convert.ToInt32(sqlcmd.ExecuteScalar());
if (count < 1)
string insertstr = "insert into Softs (AuthorCode,SerialCode) values('" + author_Code + "','" + serial_Code + "')";
SqlCommand cmd = new SqlCommand(insertstr, cn);
try
cmd.ExecuteNonQuery();
catch (MembershipCreateUserException ex) //捕捉异常
Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
else
Response.Write("<script>alert('内容重复!禁止导入');location='default.aspx'</script></script> ");
continue;
Response.Write("<script>alert('Excle表导入成功!');location='default.aspx'</script>");
cn.Close();
这是把excel存在数据库里,在显示在页面上的,看看有帮助吗?
C#通过WIN32 API实现嵌入程序窗体
本文实例讲述了C#通过WIN32 API实现嵌入程序窗体的方法,分享给大家供大家参考。具体如下:
这是一个不使用COM,而是通过WIN32 API实现的示例, 它把写字板程序嵌在了自己的一个面板中。
这么做可能没有实际意义, 因为两个程序之前没有进行有价值的交互, 这里仅仅是为了演示这么做到, 以下是详细注释过的主要源代码。
我们把它封装到一个类中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; using System.Windows.Forms; namespace System.Windows.Forms { class InsertWindow { /// <summary> /// 将程序嵌入窗体 /// </summary> /// <param name="pW">容器</param> /// <param name="appname">程序名</param> public InsertWindow(Panel pW, string appname) { this .pan = pW; this .LoadEvent(appname); pane(); } ~InsertWindow() { if (m_innerProcess!= null ) { m_innerProcess.Dispose(); } } #region 函数和变量声明 /* * 声明 Win32 API */ [DllImport( "user32.dll" )] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent ); [DllImport( "user32.dll" )] static extern Int32 GetWindowLong(IntPtr hWnd, Int32 nIndex ); [DllImport( "user32.dll" )] static extern Int32 SetWindowLong(IntPtr hWnd, Int32 nIndex, Int32 dwNewLong ); [DllImport( "user32.dll" )] static extern Int32 SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, Int32 X, Int32 Y, Int32 cx, Int32 cy, UInt32 uFlags ); /* * 定义 Win32 常数 */ const Int32 GWL_STYLE = -16; const Int32 WS_BORDER = (Int32)0x00800000L; const Int32 WS_THICKFRAME = (Int32)0x00040000L; const Int32 SWP_NOMOVE = 0x0002; const Int32 SWP_NOSIZE = 0x0001; const Int32 SWP_NOZORDER = 0x0004; const Int32 SWP_FRAMECHANGED = 0x0020; const Int32 SW_MAXIMIZE = 3; IntPtr HWND_NOTOPMOST = new IntPtr(-2); // 目标应用程序的进程. Process m_innerProcess = null ; #endregion #region 容器 private Panel pan = null ; public Panel panel1 { set { pan = value; } get { return pan; } } private void pane() { panel1.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; panel1.Resize += new EventHandler(panel1_Resize); } private void panel1_Resize( object sender, EventArgs e) { // 设置目标应用程序的窗体样式. IntPtr innerWnd = m_innerProcess.MainWindowHandle; SetWindowPos(innerWnd, IntPtr.Zero, 0, 0, panel1.ClientSize.Width, panel1.ClientSize.Height, SWP_NOZORDER); } #endregion #region 相应事件 private void LoadEvent( string appFile) { // 启动目标应用程序. m_innerProcess = Process.Start(appFile); m_innerProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; //隐藏 // 等待, 直到那个程序已经完全启动. m_innerProcess.WaitForInputIdle(); // 目标应用程序的主窗体. IntPtr innerWnd = m_innerProcess.MainWindowHandle; // 设置目标应用程序的主窗体的父亲(为我们的窗体). SetParent(innerWnd, panel1.Handle); // 除去窗体边框. Int32 wndStyle = GetWindowLong(innerWnd, GWL_STYLE); wndStyle &= ~WS_BORDER; wndStyle &= ~WS_THICKFRAME; SetWindowLong(innerWnd, GWL_STYLE, wndStyle); SetWindowPos(innerWnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); // 在Resize事件中更新目标应用程序的窗体尺寸. panel1_Resize(panel1, null ); } #endregion } } |
然后在窗口的load事件中加入详细代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime; using System.Runtime.InteropServices; using System.Diagnostics; namespace 将程序窗口嵌入到任务栏中 { public partial class Form1 : Form { private System.Windows.Forms.Panel panel1; public Form1() { InitializeComponent(); this .panel1 = new System.Windows.Forms.Panel(); this .SuspendLayout(); // // panel1 // this .panel1.Dock = System.Windows.Forms.DockStyle.Fill; this .panel1.Location = new System.Drawing.Point(0, 0); this .panel1.Name = "panel1" ; this .panel1.Size = new System.Drawing.Size(292, 273); this .panel1.TabIndex = 0; this .Controls.Add( this .panel1); Load += new EventHandler(Form1_Load); } private void Form1_Load( object sender, EventArgs e) { //string sPath = Environment.GetEnvironmentVariable("windir");//获取系统变量 windir(windows) const string appFile = "C:\\Program Files\\Windows NT\\Accessories\\wordpad.exe" ; InsertWindow insertwin = new InsertWindow(panel1, appFile); } } } |
希望本文所述对大家的C#程序设计有所帮助。
http://www.jb51.net/article/55821.htm
以上是关于C#窗体中嵌入excel的模板的主要内容,如果未能解决你的问题,请参考以下文章
C# 可以将窗体中嵌入的cefSharp浏览器页面元素值变化做成窗体可用的事件吗?