Стратегия полнотекстового индексирования для документов MS Excel

Содержание
  1. Предпосылки Как часть более широкого приложения, которое позволяет пользователям искать тысячи документов MS Office в частной сети, мне необходимо индексировать и делать файлы Microsoft Excel доступными для поиска. Мой базовый подход для всех типов документов таков: Цикл через предоставленные мне необработанные каталоги, Загрузить документ в общий сетевой ресурс. Извлеките некоторый доступный для поиска текст из содержимого документа. Создайте новую запись MS SQL с именем документа, URL-адресом местоположение и доступный для поиска контент. Используйте Full Text индексирование MS SQL в столбце «содержание», чтобы конечные пользователи могли искать ключевые слова или фразы через пользователя интерфейс. Проблема/вопрос Я не уверен в наиболее оптимальном подходе для извлечения текста с возможностью поиска из документов Excel. Моя первоначальная мысль — пройти через doc: ячейку за ячейкой и вытащить весь текст, а затем объединить этот текст вместе в запись SQL, но это кажется плохой стратегией, так как может быть несколько ячеек, которые являются точными дубликатами, ячейки, которые являются только числовыми, и, как правило, другие типы шума. Есть ли установленный шаблон проектирования или стратегия для случая? В отсутствие этого я приветствую и ценю любые предложения (как и будущие пользователи Stack Exchange, столкнувшиеся с той же проблемой). В файлах Excel используется таблица строк, которая «складывает вместе» повторяющиеся записи; если вы готовы выполнить эту работу, изучение формата файла и доступ к этой таблице строк будет выполняться намного быстрее, чем запуск Excel и т. д. и т. д. и т. д. Эта стратегия будет иметь один недостаток: она НЕ будет индексировать строки, которые являются результатом формулы, потому что их нет в таблице. Отображение расширенного текстового формата записи MS-Access в Excel Что я хочу сделать У меня есть база данных Access (C: Users 289894 Desktop Database1.accdb). Одно из полей [Table1] равно [Memo]. Это поле относится к типу данных Memo с текстовым форматом, установленным на форматированный текст. Это позволяет сохранять некоторые записи как полужирный, а некоторые записи — как курсив, например. Я хочу открыть соединение с этой базой данных Access из файла Excel, чтобы читать/писать в это поле с форматированным текстом. Я использовал код следующее: Dim datab As Database Dim rs As Recordset Dim path As String path = "C: Users 289894 Desktop Database1.accdb" Set datab = OpenDatabase (path ) Установите rs = datab.OpenRecordset ("SELECT * FROM [Table1]") Debug.Print rs! Memo Range ("A1") = rs! Memo Мой вопрос Этот код хорошо работает, чтобы открыть соединение и прочитать обычные текстовые поля, но форматированный текст действует удивительным образом (для меня). Исходный текст в доступе был «aaa». Это «aaa» жирным шрифтом. После запуска кода и debug.print, и Range («A1») имеют
    записано в них.

    Как я могу изменить свой код, чтобы также отправить формат в Excel? Я бы хотел, чтобы в ячейке A1 было выделено жирным шрифтом « aaa , как в Access.

    РЕДАКТИРОВАТЬ: обходное решение . Это решает непосредственную проблему, вызванную вопросом, без реального ответа на сам вопрос. Он использует Internet Explorer для вставки текста обратно как Rich Text без тегов.

      Sub Sample () Dim Ie As Object Dim rng As Range Set rng = Feuil1.Range (  "A1") Установите Ie = CreateObject ("InternetExplorer.Application") с помощью Ie .Visible = False .Navigate "about: blank" .Document.body.InnerHTML = rng.Value .ExecWB 17, 0 'Выберите все содержимое в браузере.  ExecWB 12, 2 'Скопируйте их ActiveSheet.Paste Destination: = rng .Quit End WithEnd Sub 
    0

    Попробуйте. Диапазон цикла является общим. Кроме того, функция предполагает очень ограниченный HTML, как показано в вашем примере. Sub Test () Dim cel As RangeFor each cel In Range ("A1: A100") cel.Font.Bold = InStr (1, cel.Value, " ") cel.Font.Italic = InStr (1, cel.Value," ") cel.Value = RemoveHTML (cel.Value) Подфункция NextEnd RemoveHTML (sHTML As String) As StringDim sTemp As StringsTemp = sHTMLDim bLeft As Byte, bRight As BytebRight = InStr (1, sTemp, "") bLeft = InStrRev (sTemp, ">", bRight) RemoveHTML = Mid (sTemp, bLeft + 1, bRight - bLeft - 1) Конечная функция Улучшите это ответ Создан 05 июля '16 в 20: 21 К сожалению мой пример был всего лишь ограниченным примером. Настоящая конечная цель - иметь возможность отправить желаемое поле в текстовое поле (а не в текстовое поле пользовательской формы) с его форматированием. Среди прочего, он может включать жирный шрифт, курсив, размер и цвет. Моя идея заключалась в том, чтобы начать с того, чтобы заставить его работать в ячейке (что я успешно сделал, добавлю свой ответ), а затем выяснить, как изменить код, чтобы я мог отправить форматированный текст из ячейки в текстовое поле. Поскольку этот конкретный вопрос остался без ответа в SO, я решил, что фрагментация на два будет лучше для дальнейшего использования. - Дэвид Дж. 05 июл. В 17:30 добавить комментарий |
    Попробуйте это. Диапазон цикла является общим. Кроме того, функция предполагает очень ограниченный HTML, как показано в вашем примере.. Sub Test () Dim cel As RangeFor each cel In Range ("A1: A100") cel.Font.Bold = InStr (1, cel.Value, " ") cel.Font.Italic = InStr (1, cel.Value," ") cel.Value = RemoveHTML (cel.Value) Подфункция NextEnd RemoveHTML (sHTML As String) As StringDim sTemp As StringsTemp = sHTMLDim bLeft As Byte, bRight As BytebRight = InStr (1, sTemp, "") bLeft = InStrRev (sTemp, ">", bRight) RemoveHTML = Mid (sTemp, bLeft + 1, bRight - bLeft - 1) Конечная функция
  • Проблема/вопрос
  • Отображение расширенного текстового формата записи MS-Access в Excel
  • Предпосылки

    Как часть более широкого приложения, которое позволяет пользователям искать тысячи документов MS Office в частной сети, мне необходимо индексировать и делать файлы Microsoft Excel доступными для поиска.

    Мой базовый подход для всех типов документов таков:

    1. Цикл через предоставленные мне необработанные каталоги,
    2. Загрузить документ в общий сетевой ресурс.
    3. Извлеките некоторый доступный для поиска текст из содержимого документа.
    4. Создайте новую запись MS SQL с именем документа, URL-адресом местоположение и доступный для поиска контент.
    5. Используйте Full Text индексирование MS SQL в столбце «содержание», чтобы конечные пользователи могли искать ключевые слова или фразы через пользователя интерфейс.

    Проблема/вопрос

    Я не уверен в наиболее оптимальном подходе для извлечения текста с возможностью поиска из документов Excel. Моя первоначальная мысль — пройти через doc: ячейку за ячейкой и вытащить весь текст, а затем объединить этот текст вместе в запись SQL, но это кажется плохой стратегией, так как может быть несколько ячеек, которые являются точными дубликатами, ячейки, которые являются только числовыми, и, как правило, другие типы шума.

    Есть ли установленный шаблон проектирования или стратегия для случая? В отсутствие этого я приветствую и ценю любые предложения (как и будущие пользователи Stack Exchange, столкнувшиеся с той же проблемой).


    В файлах Excel используется таблица строк, которая «складывает вместе» повторяющиеся записи; если вы готовы выполнить эту работу, изучение формата файла и доступ к этой таблице строк будет выполняться намного быстрее, чем запуск Excel и т. д. и т. д. и т. д. Эта стратегия будет иметь один недостаток: она НЕ будет индексировать строки, которые являются результатом формулы, потому что их нет в таблице.



    Отображение расширенного текстового формата записи MS-Access в Excel

    Что я хочу сделать

    У меня есть база данных Access (C: Users 289894 Desktop Database1.accdb). Одно из полей [Table1] равно [Memo].

    Это поле относится к типу данных Memo с текстовым форматом, установленным на форматированный текст . Это позволяет сохранять некоторые записи как полужирный , а некоторые записи — как курсив , например.

    Я хочу открыть соединение с этой базой данных Access из файла Excel, чтобы читать/писать в это поле с форматированным текстом.

    Я использовал код следующее:

      Dim datab As Database Dim rs As Recordset Dim path As String path = "C:  Users  289894  Desktop  Database1.accdb" Set datab = OpenDatabase (path  ) Установите rs = datab.OpenRecordset ("SELECT * FROM [Table1]") Debug.Print rs! Memo Range ("A1") = rs! Memo  

    Мой вопрос

    Этот код хорошо работает, чтобы открыть соединение и прочитать обычные текстовые поля, но форматированный текст действует удивительным образом (для меня). Исходный текст в доступе был « aaa ». Это «aaa» жирным шрифтом.

    После запуска кода и debug.print, и Range («A1») имеют

    записано в них.

    Как я могу изменить свой код, чтобы также отправить формат в Excel? Я бы хотел, чтобы в ячейке A1 было выделено жирным шрифтом « aaa , как в Access.

    РЕДАКТИРОВАТЬ: обходное решение . Это решает непосредственную проблему, вызванную вопросом, без реального ответа на сам вопрос. Он использует Internet Explorer для вставки текста обратно как Rich Text без тегов.

      Sub Sample () Dim Ie As Object Dim rng As Range Set rng = Feuil1.Range (  "A1") Установите Ie = CreateObject ("InternetExplorer.Application") с помощью Ie .Visible = False .Navigate "about: blank" .Document.body.InnerHTML = rng.Value .ExecWB 17, 0 'Выберите все содержимое в браузере.  ExecWB 12, 2 'Скопируйте их ActiveSheet.Paste Destination: = rng .Quit End WithEnd Sub  

    0

    Попробуйте. Диапазон цикла является общим. Кроме того, функция предполагает очень ограниченный HTML, как показано в вашем примере.

      Sub Test () Dim cel As RangeFor each cel In Range ("A1: A100") cel.Font.Bold = InStr (1, cel.Value, " ") cel.Font.Italic = InStr (1, cel.Value,"  ") cel.Value = RemoveHTML (cel.Value) Подфункция NextEnd RemoveHTML (sHTML As String) As StringDim sTemp As StringsTemp = sHTMLDim bLeft As  Byte, bRight As BytebRight = InStr (1, sTemp, "") bLeft = InStrRev (sTemp, ">", bRight) RemoveHTML = Mid (sTemp, bLeft + 1, bRight - bLeft - 1) Конечная функция  

    Улучшите это ответ
    Создан 05 июля '16 в 20: 21
    • К сожалению мой пример был всего лишь ограниченным примером. Настоящая конечная цель - иметь возможность отправить желаемое поле в текстовое поле (а не в текстовое поле пользовательской формы) с его форматированием. Среди прочего, он может включать жирный шрифт, курсив, размер и цвет. Моя идея заключалась в том, чтобы начать с того, чтобы заставить его работать в ячейке (что я успешно сделал, добавлю свой ответ), а затем выяснить, как изменить код, чтобы я мог отправить форматированный текст из ячейки в текстовое поле. Поскольку этот конкретный вопрос остался без ответа в SO, я решил, что фрагментация на два будет лучше для дальнейшего использования. - Дэвид Дж. 05 июл. В 17:30
    добавить комментарий |

    Попробуйте это. Диапазон цикла является общим. Кроме того, функция предполагает очень ограниченный HTML, как показано в вашем примере..

      Sub Test () Dim cel As RangeFor each cel In Range ("A1: A100") cel.Font.Bold = InStr (1, cel.Value, " ") cel.Font.Italic = InStr (1, cel.Value,"  ") cel.Value = RemoveHTML (cel.Value) Подфункция NextEnd RemoveHTML (sHTML As String) As StringDim sTemp As StringsTemp = sHTMLDim bLeft As  Byte, bRight As BytebRight = InStr (1, sTemp, "") bLeft = InStrRev (sTemp, ">", bRight) RemoveHTML = Mid (sTemp, bLeft + 1, bRight - bLeft - 1) Конечная функция  

    Оцените статью
    logicle.ru
    Добавить комментарий