2011-03-21 1 views
1

응용 프로그램 중 하나는 사용자가 Excel 템플릿 (Click Once를 사용하여 설치/배포 된)을 사용하여 Excel 파일을 생성 할 수 있도록합니다. 이것은 VSTO 응용 프로그램입니다.VTSO : C# Winform App에서 생성 된 Excel 파일을 열 수없는 경우가 있습니다.

Excel 파일은 레지스트리에 어떤 값을 저장하고 "호출"에 의해 genereted되는 다음 코드를합니다 (coluymns 두 개의 서로 다른 목록은 "필수"목록과 "옵션 목록"에서 행진 사용하여 템플릿 :

private void myButtonExport_Click(object sender, EventArgs e) 
{ 
    if (CurrentTableRow == null) return; 
    if (CurrentTemplateRow == null) return; 

    List<string> requiredColumns = excelTemplateTableDS.GetColumnsList(false); 
    List<string> myColumns = userTableDS.GetColumnsList(false); 
    string selectStatement; 

    try 
    { 
     CustomerListColumnSelect f = new CustomerListColumnSelect(myColumns, requiredColumns); 
     if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      selectStatement = string.Format("SELECT {0} FROM [{1}]", string.Join(", ", f.SelectedColumns.ToArray()), CurrentTableRow.TableName); 

      Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Company\Collection Development"); 
      rk.DeleteValue("TemplateTableName", false); 
      rk.DeleteValue("TemplateSelectStatement", false); 
      rk.SetValue("TemplateTableName", CurrentTableRow.TableName, Microsoft.Win32.RegistryValueKind.String); 
      rk.SetValue("TemplateSelectStatement", selectStatement, Microsoft.Win32.RegistryValueKind.String); 
      rk.Close(); 

      // Launch Excel 
      AppLog.WriteEvent("CreateCustomerList", TraceEventType.Information, 
       string.Format("Creating customer list [{0}] using table [{1}]", CurrentTemplateRow.TemplateName, CurrentTableRow.TableName)); 
      if (Debugger.IsAttached) 
      { 
       FileInfo fi = new FileInfo(CurrentTemplateRow.Path); 
       string newPath = string.Format(@"C:\Documents and Settings\mpetrie\My Documents\Visual Studio 2010\Projects\Collection Development Templates\{0}\bin\Release\{1}", CurrentTemplateRow.TemplateName, fi.Name); 
       // If running under DEBUG (and app not installed), then launch latest version 
       Process.Start(newPath); 
      } 
      else 
      { 
       Process.Start(CurrentTemplateRow.Path); 
      } 
     } 
     f.Dispose(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(this, CurrentTemplateRow.Path + "\r\n" + ex.Message, "Process.Start", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     ResetSteps(sender, e); 
     return; 
    } 
} 

그런 다음 각 템플릿에는 스프레드 시트에 데이터를로드하는 코드가 포함되어 있습니다 (이 부분에는 Excel 파일을 저장 한 후 문제가 발생하지 않습니다. 누군가가 그것을 열려고합니다.)

나는이 응용 프로그램과 VSTO에 일반적으로 익숙하지 않습니다. 내가 약간 불분명 한 점은 파일이 어떻게 저장되는지입니다. ved. 나는 그것이 저장되면 템플릿의 모든 관련 "코드"가 파일과 함께 저장되지 않고 데이터 만 저장된다는 것을 가정합니다 ...

Ocassionally, 우리 사용자는 파일을 열 수 없습니다. Excel은 오류를 제공하지 않으며, 파일을 열려고하는 것처럼 "회전"합니다. 우리는 아무런 결과없이 최대 30 분 이상 기다렸습니다. 파일이 열리면 "보인다"는 것처럼 보이지만 (렌더링 된) 결코 "그려진"것은 아닙니다. 그러나 그것은 단지 추측입니다. 이것은 매우 무작위입니다. 때때로 다른 사용자가 동일한 파일을 열 수 있으며 문제가있는 사용자가 나중에 다시 시도 할 수 있으며 파일이 정상적으로 열릴 수 있습니다.

우리는 몇 가지 "아이디어"를 통해 문제를 일으킬 수있는 항목을 확인할 수 있습니다. 비록 그것이 일어날 때 이것을 디버깅하는 법을 알지 못하는 것은 무작위적인 문제이지만 (몇 시간이나 며칠 동안 다시는 일어나지 않을 수도 있습니다). 사용자는 다른 Excel 파일을 여는 데 문제가 없으며이 응용 프로그램에서 생성 된 파일 만 문제가 있다고보고합니다.

누구에게도이 문제를 일으킬 수있는 아이디어가 있습니까?

SHAYNE는

+2

엑셀 파일을 닫으시겠습니까? Excel 개체를 해제해야합니다. using 문에 연결을 넣을 수 있습니까? http://stackoverflow.com/questions/4980467/export-dataset-to-excel – WorldIsRound

+0

코드가 완전히 잘못되었습니다. 그것은 코드의 다른 영역에서 Excel 템플릿을 호출하고 있습니다 .... 나는 주 질문을 업데이 트합니다 – Shayne

답변

0

이 문제에 대한 나의 설명을 완전히 잘못이었다. 문제를 먼저 본 후 오늘. 문제는 파일이 열리지 만 볼 수 없기 때문입니다. 문제를 더 잘 설명하는 새 스레드를 시작하겠습니다.

+0

그 스레드를 참조 할 수 있습니까? – KronoS

관련 문제