Frage

Ich habe eine Datensammlung Routine bekam, die etwa 10 Sekunden laufen dauert, dann speichert sie Daten in eine CSV-Datei:

string file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Book1.csv");
StreamWriter streamWriter1 = new StreamWriter(File.Open(file, FileMode.Create, FileAccess.Write));
DataTable table = GetMyData(); // takes about 10 seconds
foreach (DataRow row in table.Rows) {
  object[] item = row.ItemArray;
  for (int i = 0; i < item.Length; i++) {
    streamWriter1.Write(item.ToString() + ",");
  }
  streamWriter1.WriteLine();
}
streamWriter1.Close();
Process.Start("Excel", "book1.csv");

Excel dauert ein paar Momente und (5 bis 10) zu starten.

Ich möchte diese Technik ändern, so dass ich Excel rufen Sie einfach vor meiner Datensammlung, so dass die Anwendung, die von der Zeit ausgeführt werden soll ich die Daten gesammelt haben, dann haben sie nur mit den Daten der Datei angezeigt werden.

diese mit Hintergrund ist hier, was ich den Code geändert, aber es sagt mir immer die Datei nicht da ist (obwohl es ist):

Process excel = Process.Start("Excel");
if (excel != null) {
  string file = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Book1.csv");
  StreamWriter streamWriter1 = new StreamWriter(File.Open(file, FileMode.Create, FileAccess.Write));
  DataTable table = GetMyData(); // takes about 10 seconds
  foreach (DataRow row in table.Rows) {
    object[] item = row.ItemArray;
    for (int i = 0; i < item.Length; i++) {
      streamWriter1.Write(item.ToString() + ",");
    }
    streamWriter1.WriteLine();
  }
  streamWriter1.Close();
  for (int i = 0; i < 100; i++) { // simulate the data collection routine
    Thread.Sleep(100);
  }
  excel.StartInfo.Arguments = file;
  excel.StartInfo.ErrorDialog = true;
  excel.StartInfo.UseShellExecute = false;
  excel.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  try {
    excel.Start();
  } catch (Exception err) {
    Console.WriteLine(err.Message); // <= Message is "The system cannot find the file specified"
  }
}

Alle Gedanken? Wie würde ich richtig die Datei in dem aktiven Prozess senden?

War es hilfreich?

Lösung

Sie können die Startinfo angeben, nachdem der Prozess gestartet wurde. Startinfo ist, den Prozess zu starten.

Unter Umständen können Sie tun, was Sie wollen byb starten Excel mit Process.Start() und dann nach Datensammlung, mit Excel Automatisierung Excel anweisen, eine bestimmte Datei zu öffnen.

// connect to, or start, Excel:
Excel.Application xl=new Excel.ApplicationClass(); 

Excel.Workbook wb = xl.Workbooks.Open(Environment.CurrentDirectory+"/SampleExcel.xls",
                                      0,
                                      false,
                                      5,
                                      System.Reflection.Missing.Value,
                                      System.Reflection.Missing.Value,
                                      false,
                                      System.Reflection.Missing.Value,
                                      System.Reflection.Missing.Value,
                                      true,
                                      false,
                                      System.Reflection.Missing.Value,
                                      false,
                                      false,
                                      false);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top