code

C #에서 Word 문서를 어떻게 만들 수 있습니까?

codestyles 2020. 10. 24. 10:16
반응형

C #에서 Word 문서를 어떻게 만들 수 있습니까?


MS Word 형식으로 보고서 내보내기를 생성하려는 프로젝트가 있습니다. 보고서에는 이미지 / 그래프, 표 및 텍스트가 포함됩니다. 이를 수행하는 가장 좋은 방법은 무엇입니까? 타사 도구? 당신의 경험은 무엇입니까?


대답은 응용 프로그램이 서버에서 실행 중인지 아니면 클라이언트 컴퓨터에서 실행 중인지에 따라 약간 달라집니다. 서버에서 실행중인 경우 서버에서 Office Automation을 사용할 때 알려진 문제가 있으므로 XML 기반 사무실 생성 형식 중 하나를 사용하려고 합니다 .

그러나 클라이언트 컴퓨터에서 작업하는 경우 Office 자동화를 사용하거나 기본적으로 또는 서비스 팩을 통해 Microsoft Office 2000 이상에서 지원되는 Office Open XML 형식 (아래 링크 참조)을 사용할 수 있습니다. 하지만 이에 대한 한 가지 단점은 표시하려는 일부 종류의 그래프 나 이미지를 포함하지 못할 수도 있다는 것입니다.

일을 처리하는 가장 좋은 방법은 모두 개발에 투자해야하는 시간에 따라 달라집니다. Office Automation의 길을 가면 Google을 통해 찾을 수 있고 배우기 쉬운 좋은 자습서가 꽤 많이 있습니다. 그러나 Open Office XML 형식은 상당히 새로운 형식이므로 학습 곡선이 조금 더 높을 수 있습니다.

Office Open XML 정보


DocX 문서 작성을위한 DocX 무료 라이브러리 로 활발하게 개발되었으며 사용하기 매우 쉽고 직관적입니다. CodePlex가 죽어 가기 때문에 프로젝트는 github 로 이동했습니다 .


저는 지난 주에 Office Open XML에 대해 알아 보았습니다 . Microsoft Word에서보고하려는 측량 데이터를 저장하는 데이터베이스 애플리케이션이 있습니다. 실제로 C #에서 처음부터 Word 2007 (docx) 파일을 만들 수 있습니다. Open XML SDK 버전 2에는 실제로 Word 문서를 완전히 다시 만들 수있는 C # 코드를 제공하는 Document Reflector라는 멋진 응용 프로그램이 포함되어 있습니다. 코드의 일부 또는 전체를 사용하고 변경하려는 비트를 즉시 대체 할 수 있습니다. SDK에 포함 된 도움말 파일에는 좋은 코드 샘플도 있습니다.

서버에 Office Interop 또는 다른 Office 소프트웨어가 필요하지 않습니다. 새로운 형식은 100 % XML입니다.


.RTF를 대안으로 사용해 보셨습니까?

텍스트뿐만 아니라 이미지 및 표 포함을 지원하고, 기본적으로 Microsoft Word를 사용하여 열리 며, 기능 세트는 멀지 않은 Word 문서처럼 보이고 느껴지고 열리는 것에 대해 더 제한적이지만 (고급 서식 계산) 더 제한적입니다.

최종 사용자는 아마 눈치 채지 못할 것입니다.


나는 발견했다 Aspose 단어를 등의 오피스 오픈 XML을 열 수 있습니다 모든 사람 / *. 가장 DOCX 형식의 파일과 워드 상호 운용성을 수 및 Word 자동화 버그가 될 수 있습니다. Aspose Words는 Word 97 이상에서 대부분의 문서 파일 형식을 지원합니다.

유료 구성 요소이지만 큰 지원이 있습니다. 이미 제안 된 다른 대안은 RTF입니다.


.NET, 특히 C # 또는 VB.NET 내에서 Office Automation을 사용하여 Word 문서를 생성하려면 :

  1. 프로젝트에 Microsoft.Office.Interop.Word 어셈블리 참조를 추가합니다 . 경로는 \ Visual Studio Tools for Office \ PIA \ Office11 \ Microsoft.Office.Interop.Word.dll 입니다.

  2. http://support.microsoft.com/kb/316384/en-us에서 찾을 수있는 Microsoft 코드 예제를 따르십시오 .


Schmidty, 웹 서버에서 Word 문서를 생성 하려면 웹 서버뿐만 아니라 클라이언트에 대한 라이선스가 필요합니다 . Rob이 게시 한 첫 번째 링크 에서이 섹션을 참조하십시오 .

"기술적 인 문제 외에도 라이선싱 문제도 고려해야합니다. 현재 라이선싱 지침을 사용하면 클라이언트 자체에 Office 라이선스가 부여 된 복사본이없는 경우 서버에서 Office 응용 프로그램을 사용하여 클라이언트 요청을 처리 할 수 ​​없습니다. 서버 측 자동화를 사용하여 Office 기능을 제공합니다. 라이선스가없는 워크 스테이션에는 EULA (최종 사용자 라이선스 계약)가 적용되지 않습니다. "

라이선스 요구 사항을 충족하는 경우 COM Interop (구체적으로는 Office XP Primary Interop Assemblies) 을 사용해야한다고 생각합니다 .


VSTO (Visual Studio Tools for Office)를 확인하세요. Word 템플릿을 만들고 xml 데이터 아일랜드를 삽입 한 다음 클라이언트로 보내는 것은 매우 간단합니다. 사용자가 Word에서 문서를 열면 Word는 xml을 읽고 WordML로 변환하고 렌더링합니다. VSTO 라이브러리의 ServerDocument 클래스를보고 싶을 것입니다. 내 경험에서 추가 라이선스가 필요하지 않습니다.


doc 및 docx 형식을 지원하는 Syncfusion Backoffice DocIO를 사용하여 좋은 성공을 거두었습니다.

이전 릴리스에서는 모든 것을 단어로 지원하지는 않았지만 목록에 따라 메일 병합 접근 방식으로 표와 텍스트로 테스트했으며 제대로 작동했습니다.

그래도 이미지 가져 오기에 대해 확실하지 않습니다. 그들의 홍보 페이지 http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx 에는

Blockquote Essential DocIO는 거의 모든 형식으로 문서에 스칼라 및 벡터 이미지를 삽입 할 수 있도록 지원합니다. Bitmap, gif, png 및 tiff는 지원되는 일반적인 이미지 유형 중 일부입니다.

그래서 고려할 가치가 있습니다.

다른 사람들이 RTF 문서를 작성할 수 있다고 언급했듯이 http://www.codeproject.com/KB/string/nrtftree.aspx 와 같은 .net에 대한 좋은 RTF 라이브러리가 있습니다 .


나는이 문제에 직면했고이를 위해 작은 라이브러리를 만들었다. 여러 프로젝트에서 사용 된 후 게시하기로 결정했습니다. 무료이며 매우 간단하지만 작업에 도움이 될 것이라고 확신합니다. Office Open XML 라이브러리 ( http://invoke.co.nz/products/docx.aspx)를 호출합니다 .


Open XML WordprocessingML 문서 생성에 대한 블로그 게시물 시리즈를 작성했습니다 . 내 접근 방식은 콘텐츠 컨트롤이 포함 된 템플릿 문서를 만들고 각 콘텐츠 컨트롤에서 문서 생성 프로세스를 구동하는 데이터가 포함 된 XML 문서에서 콘텐츠를 검색하는 방법을 정의하는 XPath 식을 작성하는 것입니다. 코드는 무료이며 Ms-RL (Microsoft Reciprocal License)에 따라 사용이 허가됩니다 . 동일한 블로그 게시물 시리즈에서 콘텐츠 컨트롤에 C # 코드를 작성하는 방법도 살펴 봅니다. 그런 다음 문서 생성 프로세스는 템플릿 문서를 처리하고 원하는 문서를 생성하는 C # 프로그램을 생성합니다. 이 방법의 장점은 당신이 사용할 수 있다는 것입니다 어떤문서 생성 프로세스를위한 데이터 소스로서의 데이터 소스. 이 코드는 Microsoft 상호 라이선스에 따라 사용이 허가됩니다.


나는 현재 정확히이 일을한다.

문서가 그다지 크지 않고 이미지 등이 포함되지 않은 경우 # MergeFields #가 포함 된 RTF로 저장하고 콘텐츠로 대체하여 결과를 RTF로 사용자에게 보냅니다.

이미지와 동적으로 삽입 된 이미지를 포함한 더 큰 문서의 경우 초기 Word 문서를 # MergeFields #가 포함 된 단일 웹 페이지 * .mht 파일로 다시 저장합니다. 그런 다음 위와 동일하게 수행합니다. 이를 사용하여 몇 가지 기본 Html 테이블 태그로 DataTable을 쉽게 렌더링하고 # MergeFields # 중 하나를 전체 테이블로 바꿀 수 있습니다.

이미지는 서버와 문서에 포함 된 URL에도 저장할 수 있습니다.

Interestingly, the new Office 2007 file formats are actually zip files - if you rename the extension to .zip you can open them up and see their contents. This means you should be able to switch content such as images in and out using a simple C# zip library.


@Dale Ragan: That will work for the Office 2003 XML format, but that's not portable (as, say, .doc or .docx files would be).

To read/write those, you'll need to use the Word Object Library ActiveX control:

http://www.codeproject.com/KB/aspnet/wordapplication.aspx


@Danny Smurf: Actually this article describes what will become the Office Open XML format which Rob answered with. I will pay more attention to the links I post for now on to make sure there not obsolete. I actually did a search on WordML, which is what it was called at the time.

I believe that the Office Open XML format is the best way to go.


LibreOffice also supports headless interaction via API. Unfortunately there's currently not much information about this feature yet.. :(


You could also use Word document generator. It can be used for client-side or server-side deployment. From the project description:

WordDocumentGenerator is an utility to generate Word documents from templates using Visual Studio 2010 and Open XML 2.0 SDK. WordDocumentGenerator helps generate Word documents both non-refresh-able as well as refresh-able based on predefined templates using minimum code changes. Content controls are used as placeholders for document generation. It supports Word 2007 and Word 2010.

Grab it: http://worddocgenerator.codeplex.com/

Download SDK: http://www.microsoft.com/en-us/download/details.aspx?id=5124


Another alternative is Windward Docgen (disclaimer - I'm the founder). With Windward you design the template in Word, including images, tables, graphs, gauges, and anything else you want. You can set tags where data from an XML or SQL datasource is inserted (including functionality like forEach loops, import, etc). And then generate the report to DOCX, PDF, HTML, etc.

참고URL : https://stackoverflow.com/questions/10412/how-can-a-word-document-be-created-in-c

반응형