응용 프로그램 중 하나는 사용자가 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는
엑셀 파일을 닫으시겠습니까? Excel 개체를 해제해야합니다. using 문에 연결을 넣을 수 있습니까? http://stackoverflow.com/questions/4980467/export-dataset-to-excel – WorldIsRound
코드가 완전히 잘못되었습니다. 그것은 코드의 다른 영역에서 Excel 템플릿을 호출하고 있습니다 .... 나는 주 질문을 업데이 트합니다 – Shayne