문제

내 응용 프로그램에서 프로그래밍 방식으로 데이터를 열 수 있도록 xml 문서로 수정한 다음 xsl 시트를 사용하여 Excel xml 형식으로 변환한 데이터 집합이 있습니다.나는 이것과 관련하여 두 가지 문제에 직면했습니다.

  1. Excel은 Excel 파일을 여는 기본 Windows 응용 프로그램이 아니므로 Program.Start("xmlfilename.xml")가 실행되면 IE가 열리고 XML 파일을 읽을 수 없습니다.

  2. 파일 이름을 .xlsx로 바꾸면 "이 파일은 Excel 파일이 아닙니다. 계속하시겠습니까?"라는 경고가 표시됩니다.이는 고객에게 이상적이지 않습니다.

이상적으로는 Excel 파일을 열기 위한 기본 OS 설정을 수정하지 않고 Windows가 Excel에서 파일을 열도록 하고 싶습니다.Office 상호 운용성은 가능하지만 이 응용 프로그램에는 약간 과잉인 것 같습니다.누구든지 이 작업을 수행할 아이디어가 있습니까?

솔루션은 .Net/C#에 있지만 깨끗한 솔루션을 만들 수 있는 다른 가능성도 열려 있습니다.

도움이 되었습니까?

해결책

Process.Start(@"C:\Program Files\Microsoft Office\Officexx\excel.exe", "yourfile.xml");

즉, 여전히 메시지 상자가 나타납니다.Interop을 사용할 수 있다고 생각하지만 그것이 얼마나 잘 작동할지는 잘 모르겠습니다.

다른 팁

XML의 두 번째 줄에 다음을 삽입하면 Windows가 Excel로 열리도록 지시합니다.

<?mso-application progid="Excel.Sheet"?>

XML-Excel의 확장자인 xlsx로 파일을 저장하면 어떻게 될까요?

Sam이 언급했듯이 xlsx 파일 확장자는 아마도 좋은 경로일 것입니다.그러나 xml 파일을 xlsx로 저장하는 것보다 더 많은 작업이 필요합니다.xlsx는 실제로 폴더 안에 여러 개의 xml 파일이 포함된 zip 파일입니다.좋은 샘플 코드를 찾았습니다 여기 개인적으로 시도해 보지는 않았지만 좋은 설명을 제공하는 것 같습니다.

타사 라이브러리를 연결한 것에 대해 미리 사과드립니다. 무료는 아니지만 플렉스셀 스튜디오 TMS 소프트웨어에서.단순한 데이터 덤프(형식 지정, 동적 크로스탭 등) 이상의 작업을 수행하려는 경우 매우 효과적입니다.우리는 이를 사용하여 매주 수백 개의 보고서를 생성합니다.

FlexCel은 강력한 형식의 데이터 세트를 수용하고, 관계에 따라 데이터를 그룹화할 수 있으며, 생성된 Excel 파일은 Crystal Reports Excel 내보내기에서 얻을 수 있는 것보다 훨씬 더 깔끔하게 보입니다.나는 크리스탈 보고서 작업과 OLE 자동화 작업을 수행했습니다.FlexCel은 $125 EU의 가격입니다.

도움이 되었기를 바랍니다.

MSDN의 OpenXML - http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.openxml(v=office.11).aspx

using Excel = Microsoft.Office.Interop.Excel;

string workbookPath= @"C:\temp\Results_2013Apr02_110133_6692.xml";

            this.lblResultFile.Text = string.Format(@" File:{0}",workbookPath);
            if (File.Exists(workbookPath))
            {
                Excel.Application excelApp = new Excel.Application();
                excelApp.Visible = true;
                Excel.Workbook excelWorkbook = excelApp.Workbooks.OpenXML(workbookPath, Type.Missing, Excel.XlXmlLoadOption.xlXmlLoadPromptUser);
            }
            else
            {
                MessageBox.Show(String.Format("File:{0} does not exists", workbookPath));
            }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top