WORD Mail Merge с DataTable в ASP.Net C # с разрывом страницы - PullRequest
0 голосов
/ 06 января 2019

Я создаю файл слов с шаблоном слов и выгружаю данные из таблицы данных для экспорта многостраничного файла, я пробовал много dll, но получил авторское право, я хочу что-то бесплатно, мне нужны идеи и примеры ваших У меня был следующий код с библиотекой Microsoft.Office.Interop.Word, но следующие страницы были пустыми

    private void MailMerge(DataTable dt )
{
    Object oMissing = System.Reflection.Missing.Value;
    Object oTrue = true;
    Object oFalse = false;
    string filePath = Path.Combine(HttpContext.Current.Server.MapPath(@"~/ExportWord/MauSo04.dot"));
    Object oTemplatePath = filePath;

    Application wordApp = new Application();
    Document wordDoc = new Document();

    wordDoc = wordApp.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);

    wordApp.Visible = true;
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string Name= dt.Rows[i]["Name"].ToString();
        string Address= dt.Rows[i]["Address"].ToString();
        foreach (Field myMergeField in wordDoc.Fields)
        {
            int iTotalFields = 0;
            iTotalFields++;

            Range rngFieldCode = myMergeField.Code;

            String fieldText = rngFieldCode.Text;

            if (fieldText.StartsWith(" MERGEFIELD"))
            {
                Int32 endMerge = fieldText.IndexOf("\\");

                Int32 fieldNameLength = fieldText.Length - endMerge;

                String fieldName = fieldText.Substring(11, endMerge - 11);                  

                fieldName = fieldName.Trim();


                if (fieldName.Contains("Name"))
                {
                    myMergeField.Select();
                    wordApp.Selection.TypeText(Name);
                }else if (fieldName.Contains("Address"))
                {
                    myMergeField.Select();
                    wordApp.Selection.TypeText(Address);
                }
            }
        }
        wordDoc.Words.Last.InsertBreak(WdBreakType.wdPageBreak);
    }
    var path = Path.Combine(HttpContext.Current.Server.MapPath(@"~/ExportWord/Test.doc"));
    wordDoc.SaveAs(path);
    wordDoc.Close();
    wordApp.Application.Quit();
    Marshal.FinalReleaseComObject(wordApp);
    Marshal.FinalReleaseComObject(wordDoc);
    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();
}

1 Ответ

0 голосов
/ 06 января 2019

Я записываю для вас микро, надеюсь, это поможет

Sub Macro()
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "C:ذDocuments\mail_m_example.xlsx", ConfirmConversions:= _
        False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
        WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
        Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:ذDocuments\mail_m_example.xlsx;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Database " _
        , SQLStatement:="SELECT * FROM `Sheet1$`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
    ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
        , Text:="""email2"""
    ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
        , Text:="""email"""
    ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField _
        , Text:="""email22"""
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...