Там какой-либо путь состоит в том, чтобы заставить Excel сохранить атрибуты XML в корневом элементе?

Разметка кода имеет значение

Может быть, особенности положения скобок должны оставаться чисто религиозными аргументами - но это не значит, что все стили разметки равны или что нет объективных факторов на всех!

Беда в том, что убер-правило для макета, а именно: «будь последовательным», как бы оно ни звучало, многими используется в качестве опоры, чтобы никогда не пытаться понять, можно ли использовать их стиль по умолчанию. улучшилось - и, кроме того, это даже не имеет значения .

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

Это привело меня к стилю, который имел тенденцию быть столбчатым по своей природе, с идентификаторами, логически сгруппированными и выровненными там, где это возможно (в частности, я стал строгим в отношении того, чтобы каждый аргумент метода содержался в отдельной строке). Однако, вместо длинных столбцов неизменной структуры, на самом деле выгодно изменять структуру в блоках, чтобы в итоге вы получили прямоугольные островки, которые глаз может воспринимать в одном приспособлении - даже если вы сознательно не читаете каждый символ.

Конечным результатом является то, что, как только вы привыкните к нему (что обычно занимает 1-3 дня), он становится приятным для глаз, его легче и быстрее понять, и он менее затратен для глаз и мозга, поскольку выложен таким образом, чтобы легче было принять.

Почти все без исключения все, кого я просил попробовать этот стиль (включая меня), сначала говорили: «Тьфу, я ненавижу это!», Но через день или два сказали: «Я люблю это - мне трудно это не чтобы вернуться и переписать все мои старые вещи таким образом! ".

Я надеялся найти время для проведения более контролируемых экспериментов, чтобы собрать вместе достаточно доказательств для написания статьи, но, как всегда, был слишком занят другими делами. Однако это показалось хорошей возможностью упомянуть об этом людям, интересующимся спорными техниками: -)

[Редактировать]

Я наконец-то дошел до блога об этом (после многих лет, проведенных в " значение «фаза»: Часть первая , Часть вторая , Часть третья .

7
задан John Saunders 9 March 2015 в 04:04
поделиться

1 ответ

Хорошо, я укусил пулю и написал старый добрый макрос VBA. Я решил поделиться им со всеми вами на случай, если кто-то еще столкнется с той же проблемой.

Этот макрос в основном вызывает встроенный в Excel метод XML Export (), а затем выполняет серию замен текста в полученном файле. Замена текста полностью зависит от вас. Просто поместите их на лист, подобный тому, который указан по ссылке ниже ...

Пример того, как настроить «правила замены»: (Вам будет предложено указать файл, в который вы хотите экспортировать.)

* Если вы не знакомы с диапазонами имен в Excel 2007, щелкните вкладку Формулы и выберите Диспетчер имен.

Хорошо, я не буду сохранять Вы больше в напряжении (LOL) ... вот код макроса. Просто поместите его в модуль в редакторе VBA. Я не предлагаю никаких гарантий с этим бесплатным кодом (вы можете легко сломать его, если не назовете диапазоны должным образом), но пара примеров, которые я пробовал, сработали для меня.

Option Explicit

Sub ExportXml()
    Dim exportResult As XlXmlExportResult
    Dim exportPath As String
    Dim xmlMap As String
    Dim fileContents As String
    exportPath = RequestExportPath()
    If exportPath = "" Or exportPath = "False" Then Exit Sub
    xmlMap = range("XmlMap")
    exportResult = ActiveWorkbook.XmlMaps(xmlMap).Export(exportPath, True)
    If exportResult = xlXmlExportValidationFailed Then
        Beep
        Exit Sub
    End If
    fileContents = ReadInTextFile(exportPath)
    fileContents = ApplyReplaceRules(fileContents)
    WriteTextToFile exportPath, fileContents
End Sub

Function ApplyReplaceRules(fileContents As String) As String
    Dim replaceWorksheet As Worksheet
    Dim findWhatRange As range
    Dim replaceWithRange As range
    Dim findWhat As String
    Dim replaceWith As String
    Dim cell As Integer
    Set findWhatRange = range("FindWhat")
    Set replaceWithRange = range("ReplaceWith")
    For cell = 1 To findWhatRange.Cells.Count
        findWhat = findWhatRange.Cells(cell)
        If findWhat <> "" Then
            replaceWith = replaceWithRange.Cells(cell)
            fileContents = Replace(fileContents, findWhat, replaceWith)
        End If
    Next cell
    ApplyReplaceRules = fileContents
End Function

Function RequestExportPath() As String
    Dim messageBoxResult As VbMsgBoxResult
    Dim exportPath As String
    Dim message As String
    message = "The file already exists. Do you want to replace it?"
    Do While True
        exportPath = Application.GetSaveAsFilename("", "XML Files (*.xml),*.xml")
        If exportPath = "False" Then Exit Do
        If Not FileExists(exportPath) Then Exit Do
        messageBoxResult = MsgBox(message, vbYesNo, "File Exists")
        If messageBoxResult = vbYes Then Exit Do
    Loop
    RequestExportPath = exportPath
End Function

Function FileExists(path As String) As Boolean
    Dim fileSystemObject
    Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
    FileExists = fileSystemObject.FileExists(path)
End Function

Function ReadInTextFile(path As String) As String
    Dim fileSystemObject
    Dim textStream
    Dim fileContents As String
    Dim line As String
    Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
    Set textStream = fileSystemObject.OpenTextFile(path)
    fileContents = textStream.ReadAll
    textStream.Close
    ReadInTextFile = fileContents
End Function

Sub WriteTextToFile(path As String, fileContents As String)
    Dim fileSystemObject
    Dim textStream
    Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
    Set textStream = fileSystemObject.CreateTextFile(path, True)
    textStream.Write fileContents
    textStream.Close
End Sub
4
ответ дан 7 December 2019 в 14:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: