none
Remplazar decimales en Word C# RRS feed

  • Pregunta

  • Hola que tal disculpen alguien sabe como puedo remplazar los decimales en las cantidades que esten en un word ,  tengo el siguiente codigo que remplaza texto pero si saben de una expresion regular  se los agradecere ...

    este es el codigo que tengo :

       public static void DoSearchAndReplaceInWord()
            {
               
                Microsoft.Office.Interop.Word._Application word = new Microsoft.Office.Interop.Word.Application();
                Microsoft.Office.Interop.Word._Document doc = new Microsoft.Office.Interop.Word.Document();
    
                object missing = System.Type.Missing;
                DirectoryInfo directorio = new DirectoryInfo(@"C:\abcCaracteresLimpios");
            
                FileInfo[] fiArr = directorio.GetFiles("*.docx");
    
                foreach (FileInfo fri in fiArr)
                {
    
                    string pathr = @"C:\abcCaracteresLimpios";
                    string fullPathOpen = Path.Combine(pathr, fri.Name);
    
                 
                try
                {
                
                    object fileName = fullPathOpen;
    
          
                    doc = word.Documents.Open(ref fileName,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing, ref missing,
                        ref missing, ref missing, ref missing);
    
                   
                    doc.Activate();
    
                   
                    foreach (Microsoft.Office.Interop.Word.Range tmpRange in doc.StoryRanges)
                    {
                        
                        tmpRange.Find.Text = @"."; // aqui es donde quiero quitar los decimales despues del punto.
                        tmpRange.Find.Replacement.Text = "";
    
                       
                        tmpRange.Find.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;
    
                       
                        object replaceAll = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
    
                      
                        tmpRange.Find.Execute(ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref replaceAll,
                            ref missing, ref missing, ref missing, ref missing);
                    }
    
                  
                    doc.Save();
    
                   
                    doc.Close(ref missing, ref missing, ref missing);
                    word.Quit(ref missing, ref missing, ref missing);
                }
                catch (Exception ex)
                {
                    doc.Close(ref missing, ref missing, ref missing);
                    word.Quit(ref missing, ref missing, ref missing);
                }
            }
            }
    Gracias !!! Saludos.
    • Editado Charlie C_' lunes, 9 de febrero de 2015 15:40 Titulo en ingles
    lunes, 9 de febrero de 2015 14:31

Respuestas

  • Mirando la doc, se pueden usar expresiones regulares (comodines) para buscar dentro del documento.

    Dado un texto "jkdf hdkh 123.546 jfjgdfs", la expresión de busca "(.{1}[0-9]{1,10})", seleccionará ".456"

    osea, una ocurrencia del punto (puedes omitir la cantidad), y entre 1 y 10 ocurrencias de los caracteres entre 0 y 9.

    Debes indicar el uso de comodines entre las opciones de busca.

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                DoSearchAndReplaceInWord(@"c:\walter\doc1.doc", "(.[0-9]{1,10})", string.Empty);
            }
    
            public static void DoSearchAndReplaceInWord(string fileName, string buscar, string reemplazar)
            {
    
                Word._Application word = new Word.Application();
                Word._Document doc = new Word.Document();
    
                doc = word.Documents.Open(fileName);
                doc.Activate();
                doc.Range().Find.Execute(buscar, null, null, true, null, null, null, null, null, reemplazar, Word.WdReplace.wdReplaceAll, null, null, null, null);
                doc.Save();
                doc.Close();
                word.Quit();
            }
        }
    }
    

    doc1.doc (antes)
    baa 12.3456
    bbb 7.890
    ccc123456.7
    ddd  890

    doc1.doc (después)
    baa 12
    bbb 7
    ccc123456
    ddd  890

    • Editado Walter Miguel lunes, 9 de febrero de 2015 18:06
    • Marcado como respuesta Charlie C_' lunes, 9 de febrero de 2015 18:39
    lunes, 9 de febrero de 2015 16:08

Todas las respuestas

  • Mirando la doc, se pueden usar expresiones regulares (comodines) para buscar dentro del documento.

    Dado un texto "jkdf hdkh 123.546 jfjgdfs", la expresión de busca "(.{1}[0-9]{1,10})", seleccionará ".456"

    osea, una ocurrencia del punto (puedes omitir la cantidad), y entre 1 y 10 ocurrencias de los caracteres entre 0 y 9.

    Debes indicar el uso de comodines entre las opciones de busca.

    using System;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                DoSearchAndReplaceInWord(@"c:\walter\doc1.doc", "(.[0-9]{1,10})", string.Empty);
            }
    
            public static void DoSearchAndReplaceInWord(string fileName, string buscar, string reemplazar)
            {
    
                Word._Application word = new Word.Application();
                Word._Document doc = new Word.Document();
    
                doc = word.Documents.Open(fileName);
                doc.Activate();
                doc.Range().Find.Execute(buscar, null, null, true, null, null, null, null, null, reemplazar, Word.WdReplace.wdReplaceAll, null, null, null, null);
                doc.Save();
                doc.Close();
                word.Quit();
            }
        }
    }
    

    doc1.doc (antes)
    baa 12.3456
    bbb 7.890
    ccc123456.7
    ddd  890

    doc1.doc (después)
    baa 12
    bbb 7
    ccc123456
    ddd  890

    • Editado Walter Miguel lunes, 9 de febrero de 2015 18:06
    • Marcado como respuesta Charlie C_' lunes, 9 de febrero de 2015 18:39
    lunes, 9 de febrero de 2015 16:08
  • Yo género unos documentos legales la cual existe un requerimiento de ley. Los párrafos no puede contener espacios en blanco y debe ser reemplazado desde el primer párrafo hasta el último párrafo. Me imagino que debo tomar como ejemplo el reemplazo de decimales.
    jueves, 26 de septiembre de 2019 0:16