为有中文需求的客户提供多渠道中文技术支持.

Mon Jun 16, 2025 9:27 am

save Doc 後編輯功能變數值有誤
從下方範例 Save Doc 開啟功能變數
Code: Select all
EQ   \O( \S \do 0(1)) (範例結果)
EQ \O(\S\do 0(1))     (正確結果)

在範例結果 EQ 斜線前面多了空白這會導致於在 office2019 在選取的時候 word 會卡頓

Code: Select all
 

    public static Field CreateVerticalNumField(Document doc)
    {
        Field fieldRes = null;
        fieldRes = new Field(doc);
        fieldRes.Code = @"\O(\S\do 0(1))";
        fieldRes.Type = FieldType.FieldEquation;
        return fieldRes;
    }
    static async Task Main(string[] args)
    {
      Document doc = new Document();
     Section section = doc.AddSection();
     Paragraph para = section.AddParagraph();
    Field numField = CreateVerticalNumField(doc);
    para.ChildObjects.Insert(0, numField);
    doc.SaveToFile("output.doc", FileFormat.Doc);
}


此版本為
version 13.5.11
框架版本為 Console App .NET6

已發送 EQ正常範例 + EQ異常卡頓範例到
[email protected] 信箱

chihomis
 
Posts: 26
Joined: Fri Dec 18, 2020 1:10 am

Mon Jun 16, 2025 10:10 am

您好,

感謝您的諮詢
抱歉,我沒太理解您提到的問題。另外,你沒有提供CreateVerticalNumField(doc)方法對應的程式碼,我也無法進一步驗證。您是想在文件中新增EQ域嗎?我使用下面的程式碼創建,沒有遇到任何問題。為了幫助我們更精確的調查,請回信告訴我們更多關於您問題的細節,先感謝。
Code: Select all
Document doc = new Document();
Section section = doc.AddSection();
Paragraph para = section.AddParagraph();
string fieldCode = @"EQ \O(\S\do 0(1))";
Field field = para.AppendField("", FieldType.FieldEmpty);
field.Code = fieldCode;
doc.IsUpdateFields = true;
doc.SaveToFile("output.doc", FileFormat.Doc);


Sincerely,
William
E-iceblue support team
User avatar

William.Zhang
 
Posts: 766
Joined: Mon Dec 27, 2021 2:23 am

Mon Jun 16, 2025 10:43 am

您好方法如下

Code: Select all
 public static Field CreateVerticalNumField(Document doc)
    {
        Field fieldRes = null;
        fieldRes = new Field(doc);
        fieldRes.Code = @"\O(\S\do 0(1))";
        fieldRes.Type = FieldType.FieldEquation;
        return fieldRes;
    }
Last edited by chihomis on Mon Jun 16, 2025 10:45 am, edited 1 time in total.

chihomis
 
Posts: 26
Joined: Fri Dec 18, 2020 1:10 am

Mon Jun 16, 2025 10:45 am

我是在文件中新增EQ
但新增完 EQ 的結果異常
EQ \O( \S \do 0(1)) (範例結果)
EQ \O(\S\do 0(1)) (正確結果)

範例結果不會造成儲存異常 , 但會造成 word 選取文件內資料卡頓

chihomis
 
Posts: 26
Joined: Fri Dec 18, 2020 1:10 am

Tue Jun 17, 2025 2:45 am

您好,我試出你給的範例是正常的
但差在如果是下面這種寫法就不正常了 請問是甚麼原因

Code: Select all

   string originalFieldCode = @"EQ \O(\S\do 0(1))";
 // 建立並儲存 Word 文件
 Document doc = new Document();
 Section section = doc.AddSection();
 Paragraph para = section.AddParagraph();
 Field fieldRes = null;
 fieldRes = new Field(doc);
 fieldRes.Code = originalFieldCode;
 fieldRes.Type = FieldType.FieldEquation;
 para.ChildObjects.Insert(0, fieldRes);
 doc.IsUpdateFields = true;
 string filePath = "output.doc";
 doc.SaveToFile(filePath, FileFormat.Doc);

 // 重新讀取並比對功能變數
 Document loadedDoc = new Document();
 loadedDoc.LoadFromFile(filePath);

 Field foundField = null;

 foreach (Section sec in loadedDoc.Sections)
 {
     foreach (Paragraph p in sec.Paragraphs)
     {
         foreach (DocumentObject obj in p.ChildObjects)
         {
             if (obj is Field fld && fld.Type == FieldType.FieldEquation)
             {
                 foundField = fld;
                 break;
             }
         }
         if (foundField != null) break;
     }
     if (foundField != null) break;
 }

 if (foundField != null)
 {
     Console.WriteLine("原始 EQ: " + originalFieldCode);
     Console.WriteLine("讀取 EQ: " + foundField.Code);
     Console.WriteLine("是否相同: " + (originalFieldCode == foundField.Code));
 }
 else
 {
     Console.WriteLine("找不到 EQ 功能變數");
 }

chihomis
 
Posts: 26
Joined: Fri Dec 18, 2020 1:10 am

Tue Jun 17, 2025 6:53 am

您好,
感謝您的回覆。
對於你的問題,我建議你參考下面的程式碼來測試。主要交換了fieldRes.Code = originalFieldCode;和fieldRes.Type = FieldType.FieldEquation;順序,以及完善了域程式碼。
Code: Select all
 static void Main(string[] args)
 {

     Document doc = new Document();
     Section section = doc.AddSection();
     Paragraph para = section.AddParagraph();
     Field numField = CreateVerticalNumField(doc);
     para.ChildObjects.Insert(0, numField);
     doc.SaveToFile("output.doc", FileFormat.Doc);
 }
 public static Field CreateVerticalNumField(Document doc)
 {
     Field fieldRes = null;
     fieldRes = new Field(doc);
     fieldRes.Type = FieldType.FieldEquation;
     fieldRes.Code = @"EQ \O(\S\do 0(1))";
     return fieldRes;
 }

Sincerely,
William
E-iceblue support team
User avatar

William.Zhang
 
Posts: 766
Joined: Mon Dec 27, 2021 2:23 am

Tue Jun 17, 2025 8:43 am

您好,利用您提供的範例測試就沒問題了 感謝!!

chihomis
 
Posts: 26
Joined: Fri Dec 18, 2020 1:10 am

Tue Jun 17, 2025 9:12 am

您好,

感謝您的回覆。後續如果您還有它任何關於我們產品的問題,請隨時來信。

Sincerely,
William
E-iceblue support team
User avatar

William.Zhang
 
Posts: 766
Joined: Mon Dec 27, 2021 2:23 am

Return to 中文技术支持