Laden...

Excel Worksheets laden

Erstellt von IhateWin vor 19 Jahren Letzter Beitrag vor 19 Jahren 4.104 Views
I
IhateWin Themenstarter:in
79 Beiträge seit 2004
vor 19 Jahren
Excel Worksheets laden

wenn ich auf die worksheets zugreife bekomme ich immer die fm:

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

und ich weiß nicht warum, habt ihr eine idee ????

 

// project created on 07.05.2004 at 10:33
using System;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;


namespace MyFormProject 
{
	class MainForm : System.Windows.Forms.Form
	{
		private System.Windows.Forms.TextBox Load1TB;
		private System.Windows.Forms.ComboBox StartTerminCB;
		private System.Windows.Forms.TextBox Load2TB;
		private System.Windows.Forms.Button Load2BT;
		private System.Windows.Forms.Button Load1BT;
		
		object missing = Missing.Value;
		object ExcelObject = null;
		Excel.Application excel = null;
		Excel.Workbook workbook1 = null;
		Excel.Workbook workbook2 = null;
		Excel.Worksheet worksheet1 = null;
		Excel.Worksheet worksheet2 = null;
		
		public MainForm()
		{
			InitializeComponent();
			Go();
		}
	
		// THIS METHOD IS MAINTAINED BY THE FORM DESIGNER
		// DO NOT EDIT IT MANUALLY! YOUR CHANGES ARE LIKELY TO BE LOST
		void InitializeComponent() {
			this.Load1BT = new System.Windows.Forms.Button();
			this.Load2BT = new System.Windows.Forms.Button();
			this.Load2TB = new System.Windows.Forms.TextBox();
			this.StartTerminCB = new System.Windows.Forms.ComboBox();
			this.Load1TB = new System.Windows.Forms.TextBox();
			this.SuspendLayout();
			// 
			// Load1BT
			// 
			this.Load1BT.Location = new System.Drawing.Point(2, 2);
			this.Load1BT.Name = "Load1BT";
			this.Load1BT.TabIndex = 0;
			this.Load1BT.Text = "Load 1";
			this.Load1BT.Click += new System.EventHandler(this.LoadFile1);
			// 
			// Load2BT
			// 
			this.Load2BT.Location = new System.Drawing.Point(2, 28);
			this.Load2BT.Name = "Load2BT";
			this.Load2BT.TabIndex = 1;
			this.Load2BT.Text = "Load 2";
			this.Load2BT.Click += new System.EventHandler(this.LoadFile2);
			// 
			// Load2TB
			// 
			this.Load2TB.Location = new System.Drawing.Point(80, 30);
			this.Load2TB.Name = "Load2TB";
			this.Load2TB.Size = new System.Drawing.Size(406, 20);
			this.Load2TB.TabIndex = 3;
			this.Load2TB.Text = "";
			this.Load2TB.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Load2Now);
			// 
			// StartTerminCB
			// 
			this.StartTerminCB.Items.AddRange(new object[] {
						"Januar",
						"Februar",
						"März",
						"April",
						"Mai",
						"Juni",
						"Juli",
						"August",
						"September",
						"Oktober",
						"November",
						"Dezember"});
			this.StartTerminCB.Location = new System.Drawing.Point(2, 56);
			this.StartTerminCB.MaxDropDownItems = 12;
			this.StartTerminCB.Name = "StartTerminCB";
			this.StartTerminCB.Size = new System.Drawing.Size(162, 21);
			this.StartTerminCB.TabIndex = 4;
			this.StartTerminCB.SelectedIndexChanged += new System.EventHandler(this.LoadExcelSheet);
			// 
			// Load1TB
			// 
			this.Load1TB.Location = new System.Drawing.Point(80, 4);
			this.Load1TB.Name = "Load1TB";
			this.Load1TB.Size = new System.Drawing.Size(406, 20);
			this.Load1TB.TabIndex = 2;
			this.Load1TB.Text = "";
			this.Load1TB.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Load1Now);
			// 
			// MainForm
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(492, 113);
			this.Controls.Add(this.StartTerminCB);
			this.Controls.Add(this.Load2TB);
			this.Controls.Add(this.Load1TB);
			this.Controls.Add(this.Load2BT);
			this.Controls.Add(this.Load1BT);
			this.Name = "MainForm";
			this.Text = "This is my form";
			this.Closing += new System.ComponentModel.CancelEventHandler(this.ExcelBeenden);
			this.ResumeLayout(false);
		}
			
		[STAThread]
		public static void Main(string[] args)
		{
			Application.Run(new MainForm());
		}
		
		void Go()
		{
			try
			{
				StreamReader read = new StreamReader("config.ini");
				this.Load1TB.Text = read.ReadLine();
				this.Load2TB.Text = read.ReadLine();
				read.Close();
			}
			catch
			{
			}
			
			try
			{
				ExcelObject = Marshal.GetActiveObject("Excel.Application");
			}
			catch
			{
				
			}
			
			if(ExcelObject != null)
			{
				excel = (Excel.Application)ExcelObject;
			}
			else
			{
				excel = new Excel.ApplicationClass();
			}
			excel.Visible = true;
			
		}
		void LoadFile1(object sender, System.EventArgs e)
		{
			OpenFileDialog ofd = new OpenFileDialog();
			if(ofd.ShowDialog() == DialogResult.OK)
			{
				this.Load1TB.Text = ofd.FileName;
			}	
			Excel.Workbook workbook1 = excel.Workbooks.Open(this.Load1TB.Text,
			                                               missing, missing, missing, missing,
			                                               missing, missing, missing, missing,
			                                               missing, missing, missing, missing);
		}
		
		void LoadFile2(object sender, System.EventArgs e)
		{
			OpenFileDialog ofd = new OpenFileDialog();
			if(ofd.ShowDialog() == DialogResult.OK)
			{
				this.Load2TB.Text = ofd.FileName;
			}
			Excel.Workbook workbook2 = excel.Workbooks.Open(this.Load2TB.Text,
			                                               missing, missing, missing, missing,
			                                               missing, missing, missing, missing,
			                                               missing, missing, missing, missing);
		}
		

		void Load1Now(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			if(e.KeyCode == Keys.Enter)
			{
				if(this.Load1TB.Text.Length != 0)
				{
					Excel.Workbook workbook1 = excel.Workbooks.Open(this.Load1TB.Text,
				 	                                              missing, missing, missing, missing,
				  	                                             missing, missing, missing, missing,
				   	                                            missing, missing, missing, missing);					
				}
			}			
		}
		
		void Load2Now(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			if(e.KeyCode == Keys.Enter)
			{
				if(this.Load2TB.Text.Length != 0)
				{
					Excel.Workbook workbook2 = excel.Workbooks.Open(this.Load2TB.Text,
				 	                                              missing, missing, missing, missing,
				  	                                             missing, missing, missing, missing,
				   	                                            missing, missing, missing, missing);					
				}
			}
			
		}		
		
		void LoadExcelSheet(object sender, System.EventArgs e)
		{
			string HString1 = "";
			string HString2 = "";
			
			if((this.Load1TB.Text.Length != 0) && (this.Load2TB.Text.Length != 0))
			{
				switch(this.StartTerminCB.Text)
				{
					case "Januar":
						HString1 = "Januar";
						HString2 = "Jan ";
						break;
					
					case "Februar":
						HString1 = "Februar";
						HString2 = "Feb ";
						break;
					
					case "März":
						HString1 = "März";
						HString2 = "Mrz ";
						break;
					
					case "April":
						HString1 = "April";
						HString2 = "Apr ";
						break;
					
					case "Mai":
						HString1 = "Mai";
						HString1 = "Mai ";
						break;					
					
					case "Juni":
						HString1 = "Juni";
						HString2 = "Jun ";
						break;
					
					case "Juli":
						HString1 = "Juli";
						HString2 = "Jul ";
						break;
					
					case "August":
						HString1 = "August";
						HString2 = "Aug ";
						break;
					
					case "September":
						HString1 = "September";
						HString1 = "Sep ";
						break;
					
					case "Oktober":
						HString1 = "Oktober";
						HString2 = "Okt ";
						break;
					
					case "November":
						HString1 = "November";
						HString2 = "Nov ";
						break;
					
					case "Dezember":
						HString1 = "Dezember";
						HString2 = "Dez ";
						break;
				}
				
				HString1 = HString1 + DateTime.Now.Year.ToString().Substring(2,2);
				HString2 = HString2 + DateTime.Now.Year.ToString().Substring(2,2);
				MessageBox.Show(HString1,HString2);
				
				worksheet1 = (Excel.Worksheet)workbook1.Worksheets[HString1];
				worksheet2 = (Excel.Worksheet)workbook2.Worksheets[HString2];
				

				
			}
			else
			{
				MessageBox.Show("Nicht alle Exceldateien wurden geladen...");
			}
		}
		

		
		void ExcelBeenden(object sender, System.ComponentModel.CancelEventArgs e)
		{
			
			StreamWriter write = new StreamWriter("M:\\C#-programm\\ExcelMCP01\\bin\\Debug\\config.ini");
			write.WriteLine(this.Load1TB.Text);
			write.WriteLine(this.Load2TB.Text);
			write.Close();
			excel.Quit();
		}
	}			
}



R
139 Beiträge seit 2004
vor 19 Jahren

hi,

falls sich die config.ini nicht im projektordner befindet, dann ist die zeile:

StreamReader read = new StreamReader("config.ini");

die fehlerverursachende zeile.

2 bitten:

  1. bitte den hinterlassen code kurz halten
  2. schreib bitte in welche zeile der fehler auftreten tut.

posted by the real prince of persia

R
139 Beiträge seit 2004
vor 19 Jahren

mal ne andere frage, funktioniert das wirklich so?

case "März":
						HString1 = "März";
						HString2 = "Mrz ";
						break;

posted by the real prince of persia

I
IhateWin Themenstarter:in
79 Beiträge seit 2004
vor 19 Jahren
worksheets...

der fehler entsteht in der zeile wo ich die worksheets referenziere... also ganz unten ...

worksheet1 = (Excel.Worksheet)workbook1.Worksheets[HString1];  
worksheet2 = (Excel.Worksheet)workbook2.Worksheets[HString2];  

aber da das meiner meinung nach vollkommen richtig ist, hab ich denn ganzen code dargestellt....

ps.: dieses comische zeichen wurde von diesem forum hinzugefügt..., ist nicht im quelltext vorhanden...

R
139 Beiträge seit 2004
vor 19 Jahren

ist Excel eine reference? wenn ja wo ist sie?

posted by the real prince of persia

R
139 Beiträge seit 2004
vor 19 Jahren

also ganz oben deklarierst du ein neues workbook1 und weist ihm null zu.

später (in deinen methode) weist du workbook1 einen wert zu aber legst wieder eine neues workbook an.

ich tippe dass bei
worksheet1 = (Excel.Worksheet)workbook1.Worksheets[HString1];
nicht das workbook1 (welches in den methoden deklariert wurde)
verwendet sondern das globale objekt, und diese ist ja leider null -> deswegen diese art der fehlermeldung.

bin mir aber nicht sicher da ich es nicht testen konnte.

p.s.: Excel.Workbook in den methoden LoadFile und LoadNow entfernen (gilt auch für workbook2)

posted by the real prince of persia

I
IhateWin Themenstarter:in
79 Beiträge seit 2004
vor 19 Jahren
ha, das wars....

wie konnte ich das nur übersehen...

ich hab "Excel.Workbook " aus den load methoden entfernt und schon funktioniert es ... 🙂)

R
139 Beiträge seit 2004
vor 19 Jahren

also hatte ich recht, oder ? g

posted by the real prince of persia