Starte prosessen - deretter legge til den senere (MS Excel eksempel)

stemmer
0

Jeg har en datainnsamling rutine som tar ca 10 sekunder å kjøre, så det sparer dataene til en CSV-fil:

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 tar litt tid å starte så vel (5-10).

Jeg ønsker å endre denne teknikken, slik at jeg kaller Excel like før min datainnsamling slik at søknaden skal kjøre av den tiden jeg har samlet data, så bare ha det vise filen med dataene.

Med dette i tankene, her er hva jeg endret koden til, men det forteller meg alltid at filen ikke er der (selv om det er):

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
  }
}

noen tanker? Hvordan skulle jeg riktig å sende filen til den aktive prosessen?

Publisert på 20/08/2009 klokken 14:53
kilden bruker
På andre språk...                            


1 svar

stemmer
2

Du kan ikke angi startInfo etter at prosessen er i gang. StartInfo er for å starte prosessen.

Du kan være i stand til å gjøre hva du vil byb starter Excel hjelp Process.Start(), og deretter etter datainnsamling, ved hjelp av Excel automatisering å fortelle Excel for å åpne en bestemt fil.

// 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);
Svarte 20/08/2009 kl. 16:06
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more