C#窗体中嵌入excel的模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#窗体中嵌入excel的模板相关的知识,希望对你有一定的参考价值。

我用excel画好单据的模板然后在C#里面把数据写进去
我现在就想知道怎么把 excel的worksheet显示到c#窗体中去
不显示那些网格线之类的 因为是个单据样子 就跟打印预览那样
不显示网格不是主要问题 主要问题是怎么让worksheet在windows窗体中显示

不要显示excel表头啊 工具栏之类的 只显示数据

是winform窗体 不是asp.net网页

参考技术A 不显示网格线可以这样:
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浏览器页面元素值变化做成窗体可用的事件吗?

WPF中主窗体中怎么嵌入一个子窗体

Delphi 窗体中怎样嵌入网页

WinForm中如何实现嵌入form窗体(panel与子窗体)

C#通过WIN32 API实现嵌入程序窗体

C# 子窗体的设计,容器(Panel)中嵌入子窗体